我想创建一个空数组,并将项附加到它,一次一个。

xs = []
for item in data:
    xs.append(item)

我可以用NumPy数组使用这种列表风格的符号吗?


当前回答

要在NumPy中创建一个空的多维数组(例如,一个2D数组m*n来存储矩阵),如果你不知道你要追加多少行,也不关心Stephen Simmons提到的计算成本(即在每次追加时重新构建数组),你可以将你想追加的维度压缩为0:X = np。空(形状= [0,n])。

这样你可以使用例如(这里m = 5,我们假设我们在创建空矩阵时不知道,n = 2):

import numpy as np

n = 2
X = np.empty(shape=[0, n])

for i in range(5):
    for j  in range(2):
        X = np.append(X, [[i, j]], axis=0)

print X

这将给你:

[[ 0.  0.]
 [ 0.  1.]
 [ 1.  0.]
 [ 1.  1.]
 [ 2.  0.]
 [ 2.  1.]
 [ 3.  0.]
 [ 3.  1.]
 [ 4.  0.]
 [ 4.  1.]]

其他回答

如果你完全不知道数组的最终大小,你可以像这样增加数组的大小:

my_arr = numpy.zeros((0,5))
for i in range(3):
    my_arr=numpy.concatenate( ( my_arr, numpy.ones((1,5)) ) )
print(my_arr)

[[ 1.  1.  1.  1.  1.]  [ 1.  1.  1.  1.  1.]  [ 1.  1.  1.  1.  1.]]

注意第一行的0。 numpy。Append是另一个选项。它调用numpy.concatenate。

下面是一些使numpys看起来更像list的方法

np_arr = np.array([])
np_arr = np.append(np_arr , 2)
np_arr = np.append(np_arr , 24)
print(np_arr)

输出:array([2.], 24。)

我认为你想用列表处理大部分工作,然后将结果作为矩阵使用。也许这是一种方法;

ur_list = []
for col in columns:
    ur_list.append(list(col))

mat = np.matrix(ur_list)

这是有效使用NumPy的错误思维模式。NumPy数组存储在连续的内存块中。要向现有数组追加行或列,需要将整个数组复制到一个新的内存块,为存储的新元素创建间隙。如果重复这样做,效率是非常低的。

与其追加行,不如分配一个适当大小的数组,然后逐行赋值:

>>> import numpy as np

>>> a = np.zeros(shape=(3, 2))
>>> a
array([[ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.]])

>>> a[0] = [1, 2]
>>> a[1] = [3, 4]
>>> a[2] = [5, 6]

>>> a
array([[ 1.,  2.],
       [ 3.,  4.],
       [ 5.,  6.]])

根据你使用它的目的,你可能需要指定数据类型(参见'dtype')。

例如,要创建一个8位值的2D数组(适合用作单色图像):

myarray = numpy.empty(shape=(H,W),dtype='u1')

对于RGB图像,包括形状中的颜色通道数:shape=(H,W,3)

您还可以考虑使用numpy进行零初始化。0代替numpy.empty。请看这里的说明。