从nd数组中提取元素并将其存储到不同的向量中

时间:2019-06-12 11:48:51

标签: python arrays numpy

我有一个1x17x3形状的维数组,其输出如下所示

[[[x1 y1 z1]
  [x2 y2 z2]
  [x3 y3 z3]
  [x17 y17 z17]]]

我要提取一维向量中的前两个元素,如下所示

vec1 = [x1,y1,x2,y2, ....... x17,y17]
vec20 [z1,z2,z3..............z17]  

我试图展平整个数组并提取元素,但是我不确定那是正确的工作方式。

import numpy as np
test = np.random.rand(1,17,3)
print(test)
rev_mat = test.flatten()
print(rev_mat)

2 个答案:

答案 0 :(得分:0)

让x表示形状为1x17x3的数组。

vec1 = np.empty(x.shape[1] * 2)
vec1[0::2] = x[:,:,0]
vec1[1::2] = x[:,:,1]

vec20 = x[:,:,2].squeeze()

希望有帮助!

答案 1 :(得分:0)

具有二维数组:

In [42]: arr = np.arange(12).reshape(4,3)                                                              
In [43]: arr                                                                                           
Out[43]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

我们可以通过以下方式获得前两列:

In [44]: arr[:,:2]                                                                                     
Out[44]: 
array([[ 0,  1],
       [ 3,  4],
       [ 6,  7],
       [ 9, 10]])

并使用ravel

将其设置为1d
In [45]: arr[:,:2].ravel()                                                                             
Out[45]: array([ 0,  1,  3,  4,  6,  7,  9, 10])

第三列:

In [46]: arr[:,2]                                                                                      
Out[46]: array([ 2,  5,  8, 11])

您有3d,但是第一个维度是1,因此您可以将它“索引”为一种方式:

In [47]: arr = np.arange(12).reshape(1,4,3)                                                            
In [48]: arr                                                                                           
Out[48]: 
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]]])
In [49]: arr[0,:,:2].ravel()                                                                           
Out[49]: array([ 0,  1,  3,  4,  6,  7,  9, 10])