我试图做一个项目,我想将一组向量保存到一个numpy数组中。
我想要一个像这样的数组:
[[[ 2.52416655e+05 -3.39300988e+05 -1.47104728e+05]
[ 7.62810170e-02 4.71563079e-02 2.04445954e-02]]
[[ -8.30154058e+10 1.11596039e+11 4.83823596e+10]
[ -2.50869296e+04 -1.54980220e+04 -6.72001994e+03]]
[[ -8.33917881e+10 1.11616209e+11 4.84208579e+10]
[ -2.52465548e+04 -1.64620901e+04 -7.06724029e+03]]]
通过在开头使用这样的单个数组:
[[ 2.52416655e+05 -3.39300988e+05 -1.47104728e+05]
[ -8.30154058e+10 1.11596039e+11 4.83823596e+10]
[ -8.33917881e+10 1.11616209e+11 4.84208579e+10]]
通过算法的每次迭代,我将向该数组添加一组新的向量。在第一次迭代之后,数组将像我在第一部分中显示的nd数组一样。
是否有任何numpy方法可以让我这样做?如果有更好的方法,请告诉我。非常感谢!!
答案 0 :(得分:0)
如果您的数组是X
,则可以执行以下操作
np.vstack([x[0] for x in X]) # loop and get first element
或
np.vstack(X)[0::2] # get even rows
答案 1 :(得分:0)
假设你从数组a:
开始a
Out[891]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
你想追加数组b:
b
Out[892]:
array([[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]])
您可以使用np.r_将它们合并到最终的数组'final',然后重新整形。
final = np.r_[a,b]
final.reshape((3,-1,3),order='F')
Out[898]:
array([[[ 0, 1, 2],
[ 9, 10, 11]],
[[ 3, 4, 5],
[12, 13, 14]],
[[ 6, 7, 8],
[15, 16, 17]]])
当你追加另一个数组c时,你也可以这样做:
c
Out[899]:
array([[18, 19, 20],
[21, 22, 23],
[24, 25, 26]])
final = np.r_[final,c]
final.reshape((3,-1,3),order='F')
Out[901]:
array([[[ 0, 1, 2],
[ 9, 10, 11],
[18, 19, 20]],
[[ 3, 4, 5],
[12, 13, 14],
[21, 22, 23]],
[[ 6, 7, 8],
[15, 16, 17],
[24, 25, 26]]])
答案 2 :(得分:0)
使用2个(或更多)相同形状的阵列,您可以在多个轴上连接它们,包括现有的水平或垂直轴。但是np.array
在新的轴上加入了他们的开头'
In [429]: A = np.arange(9).reshape(3,3)
In [430]: B = np.arange(9,18).reshape(3,3)
In [431]: np.array([A,B]) # (2,3,3) array
Out[431]:
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]]])
结果与我在三重嵌套列表中输入的结果相同。 np.stack
是np.concatenate
的新版本,可以执行相同的操作,也可以加入另一个新轴。我认为axis=1
可以满足您的需求:
In [432]: np.stack([A,B], axis=1) # a (3,2,3) array
Out[432]:
array([[[ 0, 1, 2],
[ 9, 10, 11]],
[[ 3, 4, 5],
[12, 13, 14]],
[[ 6, 7, 8],
[15, 16, 17]]])
In [433]: _[:,0,:] # selecting from the 2nd axis to get A
Out[433]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
使用np.concatenate
及其衍生物。
哦,如果你需要加入像这样的大量数组,最好在列表e.g.
中收集它们[A,B,C,D,...] {{1}只堆一次。列表追加更适合迭代使用。
某些安排需要通过转置或轴交换进行进一步操作。但我不认为这里需要这样做。