Другая идея состоит в том, чтобы инициализировать массив результатов c
нулями (на основе формы a
), а затем использовать логическую маску для заполнения значений из a
.Ниже приведена иллюстрация:
# result array
In [28]: c = np.zeros_like(a)
# get the indices where nonzero values exist in array `b`
In [29]: nonzero_idx = np.nonzero(b)
# extract the corresponding values from the array `a` and
# fill in the array `c` using the same indices
In [30]: c[nonzero_idx] = a[nonzero_idx]
In [31]: c
Out[31]: array([1, 0, 0, 0, 0, 4])
Объяснение случая использования numpy.where
:
In [42]: np.where(b > 0, *[a, 0])
Out[42]: array([1, 0, 0, 0, 0, 4])
часть b > 0
являетсяусловие, которое мы собираемся проверить, с записями в массиве a
.Если это условие выполнено, то эти элементы будут возвращены, иначе мы вернемся 0
;вот почему мы передаем 0 в качестве третьего аргумента numpy.where()
Если вы хотите, чтобы вместо 0
s были заполнены некоторые другие значения, то передайте требуемое значение.Например, допустим, мы хотим, чтобы -9
заполнялось в местах, где условие (b > 0
) не выполняется (то есть False
), тогда мы будем писать что-то вроде:
In [43]: np.where(b > 0, *[a, -9])
Out[43]: array([ 1, -9, -9, -9, -9, 4])