Я пытаюсь динамически построить 2-D матрицу с NumPy на основе значений массива, например:Динамически заполнять матрицу numpy из значений массива?
In [113]: A = np.zeros((5,5),dtype=bool)
In [114]: A
Out[114]: array([[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False]], dtype=bool)
In [116]: B = np.array([0,1,3,0,2])
In [117]: B
Out[117]: array([0, 1, 3, 0, 2])
Теперь я хотел бы использовать значение из B, чтобы присвоить первый n значений каждой строки от А до Истины. Для этого A и B, правильный результат будет:
In [118]: A
Out[118]: array([[False, False, False, False, False],
[ True, False, False, False, False],
[ True, True, True, False, False],
[False, False, False, False, False],
[ True, True, False, False, False]], dtype=bool)
Длина B всегда будет равно числу строк матрицы А, а значения B всегда будет меньше или равно числу столбцы A. Размер A и значения B постоянно меняются, поэтому мне нужно построить их на лету.
Я уверен, что у этого есть простое (-ish) решение в numpy, но я провел последний час, ударяя головой о вариации повтора, плитки и всего остального, о чем я могу думать. Может ли кто-нибудь помочь мне, прежде чем я дам себе сотрясение мозга? :)
EDIT: Мне нужно будет сделать это много, поэтому скорость будет проблемой. Единственный вариант, который я могу придумать сейчас что-то вроде:
np.vstack([ [True]*x + [False]*(500-x) for x in B ])
, но я ожидаю, что это будет медленным из-за цикл (я бы время это, если бы я не имел ничего, чтобы сравнить его с).
Сладкого Рождества, это хорошо! И быстро тоже ... спасибо! – Winawer
Обратите внимание, что вам не нужно фактически создавать 'A'-- Я только сделал это, чтобы проверить форму. Все, что вам нужно, это число 'len (A [0])' и 'B'. – DSM