切片多维数组,索引问题

时间:2019-03-07 15:13:40

标签: python numpy

我这行是

 event_probs=np.asarray( 
 self.all_results_probabilities_smoothed[start_frame_num:end_frame_number])[:,0]

这是该行的印刷品

ndarray: [array([0.99221474, 0.02794698, 0.01088856], dtype=float32)
array([0.99584645, 0.03152211, 0.08942476], dtype=float32)
array([0.9955728 , 0.02596352, 0.26252457], dtype=float32)
array([0.99848574, 0.03096167, 0.83289665], dtype=float32)
array([0.9988594 , 0.02529432, 0.93383425], dtype=float32)
array([0.9988399 , 0.02355683, 0.96631527], dtype=float32)
array([0.99924624, 0.03478203, 0.99265254], dtype=float32)
array([0.99880326, 0.03510844, 0.9966635 ], dtype=float32)
array([0.99914837, 0.02710808, 0.9968749 ], dtype=float32)
array([0.9986891 , 0.02977812, 0.9965431 ], dtype=float32)
array([0.9985268 , 0.04807042, 0.99733377], dtype=float32)
array([0.9950269 , 0.03662388, 0.9988675 ], dtype=float32)
array([0.98378396, 0.04183222, 0.9989925 ], dtype=float32)
array([0.9758868 , 0.07405277, 0.9994506 ], dtype=float32)
array([0.9407065 , 0.36036757, 0.9992743 ], dtype=float32)
array([0.925014  , 0.45132786, 0.99823976], dtype=float32)
array([0.89381886, 0.77280957,...

我需要更改代码,以获取所有数组的每个数组的第一个元素

self.all_results_probabilities_smoothed数组[start_frame_num:end_frame_number] 看起来像这样

 ndarray: [[array([0.99221474, 0.02794698, 0.01088856], dtype=float32) 766]
 [array([0.99584645, 0.03152211, 0.08942476], dtype=float32) 767]
 [array([0.9955728 , 0.02596352, 0.26252457], dtype=float32) 768]
 [array([0.99848574, 0.03096167, 0.83289665], dtype=float32) 769]
[array([0.9988594 , 0.02529432, 0.93383425], dtype=float32) 770]
[array([0.9988399 , 0.02355683, 0.96631527], dtype=float32) 771]
[array([0.99924624, 0.03478203, 0.99265254], dtype=float32) 772]
[array([0.99880326, 0.03510844, 0.9966635 ], dtype=float32) 773]
[array([0.99914837, 0.02710808, 0.9968749 ], dtype=float32) 774]
[array([0.9986891 , 0.02977812, 0.9965431 ], dtype=float32) 775]
[array([0.9985268 , 0.04807042, 0.99733377], dtype=float32) 776]
[array([0.9950269 , 0.03662388, 0.9988675 ], dtype=float32) 777]
[array([0.98378396, 0.04183222, 0.9989925 ], dtype=float32) 778]
[array([0.9758868 , 0.07405277, 0.9994506 ], dtype=float32) 779]
[array([0.9407065 , 0.36036757, 0.9992743 ], dtype=float32) 780]

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

您可以使用for循环遍历multi数组并获取单个数组并获取第一个元素示例代码

for i in your_multi_dim_arra: c=i[0]

或者您可以使用切片

your_multi_dim_arr[:, 0] 对不起,我忘了切片 这表示您正在选择所有行,如果使用-1,则在其中选择第0个索引元素,这意味着最右边的索引值

答案 1 :(得分:0)

您可以使用numpy索引/切片多维数组的方式对其进行切片

>>> a=np.array([[3,2,1],[4,5,6],[9,8,7],[10,11,12]])
>>> a
array([[ 3,  2,  1],
       [ 4,  5,  6],
       [ 9,  8,  7],
       [10, 11, 12]])
>>> a[:,0]
array([ 3,  4,  9, 10])

索引的含义

#   array name [  all rows  ,  column index ]    
>>> a          [  :         ,  0            ]

答案 2 :(得分:0)

好像您已经生成了一个包含数组和数字的二维数组。我可以使用以下方法创建类似的内容:

In [191]: arr = np.array([(np.random.randint(0,10,3),np.random.randint(0,10,1)[0]) for _ in range(5)])                                                
In [192]: arr                                                                   
Out[192]: 
array([[array([8, 3, 6]), 5],
       [array([2, 2, 5]), 7],
       [array([1, 1, 4]), 9],
       [array([9, 2, 2]), 2],
       [array([6, 8, 2]), 8]], dtype=object)

检查dtype和形状:

In [193]: arr.dtype                                                             
Out[193]: dtype('O')
In [194]: arr.shape                                                             
Out[194]: (5, 2)

数字列:

In [195]: arr[:,1]                                                              
Out[195]: array([5, 7, 9, 2, 8], dtype=object)

您已经找到的数组列:

In [196]: arr[:,0]                                                              
Out[196]: 
array([array([8, 3, 6]), array([2, 2, 5]), array([1, 1, 4]),
       array([9, 2, 2]), array([6, 8, 2])], dtype=object)

如果所有这些数组都具有相同的形状,则可以将它们合并为一个数组:

In [197]: np.stack(arr[:,0])                                                    
Out[197]: 
array([[8, 3, 6],
       [2, 2, 5],
       [1, 1, 4],
       [9, 2, 2],
       [6, 8, 2]])

然后我们可以像以前一样将其编入索引:

In [198]: np.stack(arr[:,0])[:,0]                                               
Out[198]: array([8, 2, 1, 9, 6])

如果子数组的形状不同,则必须使用列表理解来获取每个子数组的第一个元素。