向numpy数组添加新向量

2024-04-23 17:04:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,我想把一组向量保存到numpy数组中。你知道吗

我想要这样一个nd数组:

[[[  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方法可以让我这么做吗?如果有更好的方法,请告诉我。谢谢!!你知道吗


Tags: 项目方法numpy算法数组向量nd
3条回答

如果X是数组,那么可以执行以下操作

np.vstack([x[0] for x in X]) # loop and get first element

或者

np.vstack(X)[0::2] # get even rows

假设从数组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个(或更多)形状相同的阵列,可以在多个轴上连接它们,包括现有的水平或垂直方向。但是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.stacknp.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,…]and apply the堆栈中`就一次。列表附加更适合于迭代使用。你知道吗

有些安排需要进一步操作转置或轴交换。但我不认为这是必要的。你知道吗

相关问题 更多 >