2013-06-05 3 views
1

Я начинаю с массива numpy массивов numpy, где каждый из внутренних массивов numpy может иметь разную длину. Пример приведен ниже:Оптимизация логических операций для вложенных массивов numpy

import numpy as np 
a = np.array([1,2,3]) 
b = np.array([4,5]) 
c = np.array([a, b]) 

print c 
[[1 2 3] [4 5]] 

Я хотел бы иметь возможность выполнять логические операции на каждом элементе в каждом элементе в массиве с, но когда я пытаюсь я получаю следующее сообщение об ошибке: значение

print c > 0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: The truth value of an array with more than one element is ambiguous. 
Use a.any() or a.all() 

Я хотел бы быть в состоянии получить результат:

[[True True True] [True True]] 

Без использования для цикла или итерацию на внешнем массиве. Возможно ли это, и если да, то как я могу это сделать?

+1

Что не так с внешней петлей? Numpy хорош для однородных массивов чисел с фиксированными размерами. Проверьте [это обсуждение SO] (http://stackoverflow.com/q/3386259/155813). – mg007

ответ

1

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

import numpy as np 
a = np.array([1,2,3]) 
b = np.array([4,5, -99]) 
c = np.array([a, b]) 

print c.shape 
# (2, 3) 
print c > 0 
# [[ True True True] 
# [ True True False]] 

Или сделать что-то вроде:

import numpy as np 
a = np.array([1,2,3]) 
b = np.array([4,5]) 
c = np.array([a, b]) 

out = [i > 0 for i in c] 
print out 
# [array([ True, True, True], dtype=bool), array([ True, True], dtype=bool)] 

Если обивка не вариант, вы можете на самом деле найти, что списки массивов лучше себя ведет, чем массивы массивов ,

Смежные вопросы