我想创建一个空数组,并将项附加到它,一次一个。
xs = []
for item in data:
xs.append(item)
我可以用NumPy数组使用这种列表风格的符号吗?
我想创建一个空数组,并将项附加到它,一次一个。
xs = []
for item in data:
xs.append(item)
我可以用NumPy数组使用这种列表风格的符号吗?
当前回答
我认为你想用列表处理大部分工作,然后将结果作为矩阵使用。也许这是一种方法;
ur_list = []
for col in columns:
ur_list.append(list(col))
mat = np.matrix(ur_list)
其他回答
要在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.]]
根据你使用它的目的,你可能需要指定数据类型(参见'dtype')。
例如,要创建一个8位值的2D数组(适合用作单色图像):
myarray = numpy.empty(shape=(H,W),dtype='u1')
对于RGB图像,包括形状中的颜色通道数:shape=(H,W,3)
您还可以考虑使用numpy进行零初始化。0代替numpy.empty。请看这里的说明。
也许你正在寻找的是这样的东西:
x=np.array(0)
通过这种方式,您可以创建一个没有任何元素的数组。它类似于:
x=[]
通过这种方式,您可以提前向数组中添加新元素。
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([]),但这很少有用!
可以使用append函数。行:
>>> from numpy import *
>>> a = array([10,20,30])
>>> append(a, [[1,2,3]], axis=0)
array([[10, 20, 30],
[1, 2, 3]])
列:
>>> append(a, [[15],[15]], axis=1)
array([[10, 20, 30, 15],
[1, 2, 3, 15]])
编辑 当然,正如在其他答案中提到的,除非你在矩阵/数组上做一些处理(例如反转),每次你添加一些东西到它,我只会创建一个列表,添加到它,然后将它转换为数组。