Предположим, например, у меня есть nd.array Numpy, который имеет форму (10,10):Маске массива Расчет на np.array
import numpy as np
a = np.linspace(-1,1,100).reshape(10,10)
я хотел бы выполнить расчет на первый элемент каждой строки тогда и только тогда, когда первый элемент меньше нуля. Чтобы сделать это, я думал об использовании замаскированную массива:
a = np.ma.MaskedArray(a,mask=(np.ones_like(a)*(a[:,0]<0)).T)
>>> (np.ones_like(a)*(a[:,0]<0)).T
array([[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
Это позволит мне выполнять расчеты только по строкам, в которых первый элемент меньше нуля (это просто так получилось, что в этом Например, другие элементы этих строк также отрицательны, но я проверил случай, когда только первые элементы отрицательные, а остальные положительные). У меня есть несколько вопросов на этом этапе:
1) Должен ли я добавить дополнительную маску для покрытия всех столбцов, кроме первой, чтобы выполнить мои вычисления (чтобы сделать конкретный пример: я хотел бы добавить 1000 к первому элемент каждой строки, где этот элемент меньше нуля)?
2) Маскирует массив постоянным? Есть ли способ маскировки?
3) Это самый простой способ выполнить этот тип расчета?
Любые предложения будут оценены. Благодаря!
Вы хотите обновить массив inplace? –
Да, это было бы идеально. – astromax