我有一个返回列表的函数。我想我使用np.append将此列表添加为数组中的新行,我的意图如下:
list = 4 5 6
b = 1 2 3
b = np.append(b, list)
输出;
1 2 3
4 5 6
这不是我使用的代码(其间有很多混乱)。但我得到的输出是:
2016-06-01 PRINT [ 99.86 99.928 99.9 99.875 99.8 89.7933
97.60018333 98.903 99.928 0.2801201 98.95 98.93
98.87 98.94 99.05 89.097 97.6712 98.87
99.59 0.23538903 99.711 99.732 99.725 99.724
99.769 89.777 98.12053333 99.68 99.88
0.30333219 99.805 99.79 99.743 99.71 99.69
89.7728 98.06653333 99.617 99.82 0.28981292
99.882 99.879 99.865 99.84 99.9 89.9206
98.29823333 99.82 100.08 0.31420778]
这是一个10列乘5行数组/矩阵还是50列/行数组?我觉得我在这里遗漏了一些东西 - 或者只是输出并没有真正显示出阵列的形状?
答案 0 :(得分:3)
真实列表追加:
In [701]: alist = [4,5,6]
In [702]: b=[1,2,3]
In [703]: b.append(alist)
In [704]: b
Out[704]: [1, 2, 3, [4, 5, 6]]
错误的数组操作:
In [705]: anArray=np.array([4,5,6])
In [706]: b=np.array([1,2,3])
In [707]: b=np.append(b,anArray)
In [708]: b
Out[708]: array([1, 2, 3, 4, 5, 6])
In [709]: b.shape
Out[709]: (6,)
在这里,我将anArray
连接到b
,制作了更长的数组。
之前我已经说过了 - np.append
不是一个好的功能。它看起来太像列表append
,人们最终滥用它。要么他们错过了它返回一个新数组的事实,而不是就地修改。或者他们反复使用它。
这是收集列表或数组并将它们合并为一个
的首选方式In [710]: alist = []
In [711]: b=np.array([1,2,3]) # could be b=[1,2,3]
In [712]: alist.append(b)
In [713]: b=np.array([4,5,6]) # b=[4,5,6]
In [714]: alist.append(b)
In [715]: alist
Out[715]: [array([1, 2, 3]), array([4, 5, 6])]
In [716]: np.array(alist)
Out[716]:
array([[1, 2, 3],
[4, 5, 6]])
In [717]: _.shape
Out[717]: (2, 3)
结果是2d数组。列表追加比数组append
(它是真实数组连接)快得多。构建列表然后创建数组。
定义二维数组的最常用方法是列表列表:
In [718]: np.array([[1,2,3],[4,5,6]])
Out[718]:
array([[1, 2, 3],
[4, 5, 6]])
np.concatenate
是加入数组和列表的另一种选择。如果可以更好地控制它们的连接方式,但是你必须注意输入的尺寸(你应该注意那些)。
有几个'堆栈'简化维度处理的函数stack
,hstack
,vstack
和是append
。值得查看他们的代码。
答案 1 :(得分:1)
你应该使用hstack或vstack
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.vstack((a,b))
给出
array([[1, 2, 3],
[4, 5, 6]])
或
np.hstack((a,b))
给出
array([1, 2, 3, 4, 5, 6])