2015-10-09 2 views
3

Хотите выполнить элементное сравнение между массивом 1D и 2D. Каждый элемент массива 1D нужно сравнить (например, больше) с соответствующей строкой 2D и создать маску. Ниже приведен пример:Элементное сравнение между массивами 1D и 2D

A = np.random.choice(np.arange(0, 10), (4,100)).astype(np.float) 
B = np.array([5., 4., 8., 2. ]) 

Хочу сделать

A<B 

так, что первая строка матрицы А будет сравниваться с B [0], который является 5. и результатом будет логическое значение массива.

Если я пытаюсь это я получаю:

operands could not be broadcast together with shapes (4,100) (4,) 

Любые идеи?

ответ

4

Вам необходимо вставить дополнительное измерение в массив B:

A < B[:, None] 

Это позволяет NumPy правильно совпасть две формы для вещания; B теперь имеет форму (4, 1) и размеры могут быть в паре:

(4, 100) 
(4, 1) 

Правило, что либо размеры имеют одинаковую длину, или одна из длин должна быть 1; здесь 100 может быть сопряжено с 1, а 4 может быть сопряжено с 4. Перед добавлением нового измерения NumPy попытался соединить 100 с 4, что привело к ошибке.

+0

Это было легче, чем я думал .. Ах, я должен был подумать об этом :) Да это работает .. – maus

+0

Нет проблем - рад, что это помогло. –