我想创建2D numpy.array
只知道它的形状,即shape=2
。现在,我想在for
循环i
中创建一维numpy.array
,并将它们添加到shape=2
的主矩阵中,这样我就可以得到类似的内容:
matrix=
[numpy.array 1]
[numpy.array 2]
...
[numpy.array n]
我怎样才能实现这一目标?我尝试使用:
matrix = np.empty(shape=2)
for i in np.arange(100):
array = np.zeros(random_value)
matrix = np.append(matrix, array)
但是作为print(np.shape(matrix))
的结果,循环之后,我得到了类似的东西:
(some_number, )
如何将每个新array
附加到matrix
的下一行?提前谢谢。
答案 0 :(得分:2)
我建议使用list
matrix = []
for i in range(10):
a = np.ones(2)
matrix.append(a)
matrix = np.array(matrix)
每次使用追加时,列表都没有被复制到内存中的缺点。所以你避免了ali_m描述的问题。在操作结束时,您只需将列表对象转换为numpy数组。
答案 1 :(得分:1)
我怀疑你问题的根源是np.empty(shape=2)
如果我运行代码的小版本
matrix = np.empty(shape=2)
for i in np.arange(3):
array = np.zeros(3)
matrix = np.append(matrix, array)
我得到了
array([ 9.57895902e-259, 1.51798693e-314, 0.00000000e+000,
0.00000000e+000, 0.00000000e+000, 0.00000000e+000,
0.00000000e+000, 0.00000000e+000, 0.00000000e+000,
0.00000000e+000, 0.00000000e+000])
一开始看那两个奇数?这些是np.empty(shape=2)
生成的。 matrix
以(2,)
形状的数组开始,而不是空的2d数组。 append
只会为其添加3个零,从而产生(11,)
数组。
现在,如果你开始使用具有正确列数的2数组,并且在第一维上连接,那么你将得到一个多行数组。 (行只有2d或更大的含义)。
mat=np.zeros((1,3))
for i in range(1,3):
mat = np.concatenate([mat, np.ones((1,3))*i],axis=0)
产生
array([[ 0., 0., 0.],
[ 1., 1., 1.],
[ 2., 2., 2.]])
像这样进行迭代构造的更好方法是使用list append
alist = []
for i in range(0,3):
alist.append(np.ones((1,3))*i)
mat=np.vstack(alist)
alist
是:
[array([[ 0., 0., 0.]]), array([[ 1., 1., 1.]]), array([[ 2., 2., 2.]])]
mat
是
array([[ 0., 0., 0.],
[ 1., 1., 1.],
[ 2., 2., 2.]])
使用vstack
,您可以使用np.ones((3,)
,因为它将所有输入转换为2d数组。
append
可以使用,但它还需要axis=0
个参数和2个数组。它被滥用,通常被错误地类比为列表追加。它只是concatenate
的另一个前端。所以我不想使用它。
请注意,其他海报假设您的random value
在迭代期间发生了变化。这将产生不同长度的阵列。对于1d追加仍然会产生长1d数组。但是2d追加不起作用,因为2d阵列不能被破坏。
mat = np.zeros((2,),int)
for i in range(4):
mat=np.append(mat,np.ones((i,),int)*i)
# array([0, 0, 1, 2, 2, 3, 3, 3])
答案 2 :(得分:0)
您正在寻找的功能是np.vstack
以下是您的示例
的修改版本import numpy as np
matrix = np.empty(shape=2)
for i in np.arange(3):
array = np.zeros(2)
matrix = np.vstack((matrix, array))
结果是
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])