我想创建一个空数组,并将项附加到它,一次一个。
xs = []
for item in data:
xs.append(item)
我可以用NumPy数组使用这种列表风格的符号吗?
我想创建一个空数组,并将项附加到它,一次一个。
xs = []
for item in data:
xs.append(item)
我可以用NumPy数组使用这种列表风格的符号吗?
当前回答
我认为你可以像这样创建空numpy数组:
>>> import numpy as np
>>> empty_array= np.zeros(0)
>>> empty_array
array([], dtype=float64)
>>> empty_array.shape
(0,)
当您想在循环中追加numpy数组时,这种格式非常有用。
其他回答
NumPy数组是一种与列表非常不同的数据结构,被设计成以不同的方式使用。你对hstack的使用可能非常低效…每次调用它时,现有数组中的所有数据都会复制到一个新数组中。(附加函数也会有同样的问题。)如果你想一次一列地构建你的矩阵,你最好将它保存在一个列表中,直到它完成,然后才将它转换成一个数组。
e.g.
mylist = []
for item in data:
mylist.append(item)
mat = numpy.array(mylist)
Item可以是列表、数组或任何可迭代对象 因为每一项都有相同数量的元素。 在这种特殊情况下(data是一个包含矩阵列的可迭代对象),您可以简单地使用
mat = numpy.array(data)
(还要注意,使用list作为变量名可能不是一个好的实践,因为它用该名称掩盖了内置类型,这可能会导致错误。)
编辑:
如果出于某种原因,您确实想要创建一个空数组,您可以使用numpy.array([]),但这很少有用!
这是有效使用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.]])
最简单的方法
输入:
import numpy as np
data = np.zeros((0, 0), dtype=float) # (rows,cols)
data.shape
输出: (0,0)
输入:
for i in range(n_files):
data = np.append(data, new_data, axis = 0)
我认为你可以像这样创建空numpy数组:
>>> import numpy as np
>>> empty_array= np.zeros(0)
>>> empty_array
array([], dtype=float64)
>>> empty_array.shape
(0,)
当您想在循环中追加numpy数组时,这种格式非常有用。
我认为你想用列表处理大部分工作,然后将结果作为矩阵使用。也许这是一种方法;
ur_list = []
for col in columns:
ur_list.append(list(col))
mat = np.matrix(ur_list)