2013-05-29 1 views
0

Мне нужно сделать dot product на каждой паре некоторых массивов, где есть несколько пустых вспомогательных массивов, в разных индексах. я, еОбработка пустых массивов в вложенном массиве

event1: 
array([[ 5.35375254e-07 6.40314998e-02], 0.159332022418, [], 
     0.0396021990432, 0.00795516103045, 0.0457216188153, [], 
     0.0331742073438], dtype=object) 

event2: 
array([[ 5.97561615e-06 5.56173790e-02], 0.119262253938, [], 
     0.161581488798, 0.00560146601083, 0.0735139212697, 0.0585291344263, 
     0.177536950441], dtype=object) 

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

Прежде всего, я попытался использовать пустые массивы и изменить их на ноль, но не мог придумать какое-либо решение лучше, чем перебирать каждый элемент массивов и изменять пустым до нуля.

есть ли эффективный способ сделать это?

+0

вы не можете просто использовать что-то вроде '' '[я * J для I, J в ZIP (event1, event2), если я и у]' '' или '' '[я * J для i, j в zip (фильтр (None, event1), filter (None, event2))] '' 'в зависимости от желаемого результата – oleg

+0

Не совсем, я нашел ответ – Moj

ответ

1

На самом деле я решил это с помощью метода numpy ненулевого(). Он возвращает индекс ненулевых/непустых элементов. то есть:

a = array([[5.97561615e-06, 0.055617379], 0.119262253938, [], 0.21321, []], dtype=object) 

In [110]: a.nonzero() 
Out[110]: (array([0, 1, 3]),) 

non_empty= set(a.nonzero()[0]) 
complete_index = set(range(len(a))) 
empty = list(complete - non_empty) 
a[empty]= 0 
In [130]: a 
Out[130]: array([[5.97561615e-06, 0.055617379], 0.119262253938, 0, 0.21321, 0], dtype=object) 
+0

не проще использовать' '' array ([f или 0 для f в ff]) '' ' – oleg

+0

извините, но я могу понять, что вы имеете в виду. – Moj

+1

этот код делает то же, что и ваш код, как я вижу. '' 'a = array ([f или 0 для f в a])' '' – oleg