gpt4 book ai didi

python - Numpy - 从一维数组高效构建二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:43 25 4
gpt4 key购买 nike

我在 numpy (Python 2.7) 中从一维数组构建二维数组。我正在寻找最有效的方法来做到这一点。到目前为止,我想出了:

a=np.ones(100000)

# SUBSCRIPTING

n_dim=3
x=0

for i in xrange(0,1000):
x=np.zeros(shape=(100000,n_dim))
for j in xrange(0,n_dim):
x[:,j]=a*j

# ~1.574 s/1000 loops - joinind 3 1d arrays
# ~9.162 s/1000 loops - joinind 10 1d arrays



# STACKING

for i in xrange(0,1000):
x=a*0.
for j in xrange(1,n_dim):
x=np.vstack((x,a*j))
x=x.T

# ~1.786 s/1000 loops - joinind 3 1d arrays
# ~16.603 s/1000 loops - joinind 10 1d arrays

第一种方法(下标)是我想出的最快的方法,第二种方法(堆叠)的性能增益随着我加入的一维数组的数量而增长。由于我需要多次重复此步骤,我想知道是否有更快的方法?如果它提供显着的性能提升,我愿意采用失去清晰度的解决方案。

也许我可以尝试以限制堆叠操作数量的方式堆叠数组(例如连接 4 个一维数组的情况:首先堆叠数组 1 和 2,然后是数组 3 和 4,最后是结果数组)。

我的问题是关于从一维数组高效地构建二维数组。我在这里使用的数组中的值是虚拟的。在实际应用中,我加入的一维数组中的大多数值可能会有所不同。

最佳答案

因为 numpy 将数组(默认情况下)存储在 row-major order 中按行设置值更有效。因此,我会使用:

x=np.zeros(shape=(n_dim, 100000))
for j in range(0,n_dim):
x[j,:]=a*j

或者,您可以将 x 定义为列优先,然后,这与之前的代码一样快:

x=np.zeros(shape=(100000,n_dim), order='F')
for j in range(0,n_dim):
x[:,j]=a*j

您还可以使用 numpy 外积创建 x:

v = np.arange(n_dim)
x = np.outer(v, a)

关于python - Numpy - 从一维数组高效构建二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com