Я просматривал все документы в поисках конкретной операции. Слова, которые я бы использовал для этого, являются «наложением» или «маской», но кажущаяся концепция этих слов не соответствует моим.
Я хочу взять два массива, один плотный и один разреженный и объединить их таким образом:
[ 1, 2, 3, 4, 5 ] X [ N, N, 10, N, 12 ] = [ 1, 2, 10, 4, 12 ]
Где X - операция, а N - None, или Null, -1, или какой-либо другой специальный символ.
Как это достигается в numpy / python3?
2 ответа
Вы можете использовать np.where
:
# pick special value
N = -1
dns = [ 1, 2, 3, 4, 5 ]
sprs = [ N, N, 10, N, 12 ]
# this is important otherwise the comparison below
# is not done element by element
sprs = np.array(sprs)
# tada!
np.where(sprs==N,dns,sprs)
# array([ 1, 2, 10, 4, 12])
При вызове с тремя аргументами m,a,b
where
"смешивает" a
и b
, принимая элементы из a
, где m
равен True
и из b
где это False
.
Вы можете «заполнить» маскированный массив с помощью np.ma.filled(..)
[numpy-doc], например:
>>> a
array([1, 2, 3, 4, 5])
>>> b
masked_array(data=[--, --, 10, --, 12],
mask=[ True, True, False, True, False],
fill_value=999999)
>>> b.filled(a)
array([ 1, 2, 10, 4, 12])
>>> np.ma.filled(b, a)
array([ 1, 2, 10, 4, 12])
Здесь мы, таким образом, заполняем маскированные значения из b
соответствующими значениями a
.
Похожие вопросы
Новые вопросы
python-3.x
НЕ ИСПОЛЬЗУЙТЕ, ЕСЛИ ВАШ ВОПРОС ТОЛЬКО ДЛЯ PYTHON 3. Всегда используйте вместе со стандартным тегом [python].