нарезка массива multi d, проблема с индексом - PullRequest
0 голосов
/ 07 марта 2019

я запускаю эту строку

 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 голосов
/ 07 марта 2019

Вы можете нарезать его, используя способ индексации / нарезки многомерных массивов 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            ]
0 голосов
/ 07 марта 2019

Похоже, вы сгенерировали 2d массив, содержащий массивы и числа. Я могу создать что-то подобное с:

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])

Если подмассивы различаются по форме, нам нужно использовать понимание списка, чтобы получить первый элемент каждого.

0 голосов
/ 07 марта 2019

Вы можете использовать цикл for, чтобы перебрать мульти-массив и получить отдельный массив и получить пример кода первого элемента

for i in your_multi_dim_arra: c=i[0]

Или вы можете использовать нарезку

your_multi_dim_arr[:, 0] Извините, я забыл нарезать кстати Это означает, что вы выбираете все строки и внутри, которые выбирают 0-й элемент индекса, если вы используете -1, это означает самое правое значение индекса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...