Установить или выбрать один элемент из каждого столбца легко:
In [10]: arr = np.ones((5,3),int)
In [11]: b = np.array([3,1,2])
In [12]: arr[b, np.arange(3)] = 0
In [13]: arr
Out[13]:
array([[1, 1, 1],
[1, 0, 1],
[1, 1, 0],
[0, 1, 1],
[1, 1, 1]])
Но установить фрагмент для каждого столбца сложнее.Самое простое - просто итерировать по столбцам.
In [14]: for i,j in enumerate(b):
...: arr[j:, i] = 0
...:
In [15]: arr
Out[15]:
array([[1, 1, 1],
[1, 0, 1],
[1, 0, 0],
[0, 0, 0],
[0, 0, 0]])
Другой способ заключается в настройке маски с использованием сравнения b
с np.arange(5)
.Это быстрее, но не так интуитивно понятно.Я должен переосмыслить подход каждый раз.
In [16]: mask = np.arange(5)[:,None]>=b
In [17]: mask
Out[17]:
array([[False, False, False],
[False, True, False],
[False, True, True],
[ True, True, True],
[ True, True, True]])
In [18]: arr[mask] = 2
In [19]: arr
Out[19]:
array([[1, 1, 1],
[1, 2, 1],
[1, 2, 2],
[2, 2, 2],
[2, 2, 2]])