1
私は完全に機能する関数を持っています。それはnumpy 2D配列をとり、配列で何かをしてから戻します。 返された値を使用して配列を条件で満たすことを試みています。以下のコードをご覧ください:numpy配列の2D配列関数の戻り値の割り当て
>>> import numpy as np
>>> x=np.random.randint(20, size=(4,5))
>>> y=np.zeros_like(x) * np.nan
>>> x
array([[19, 0, 6, 17, 5],
[18, 18, 10, 19, 9],
[ 2, 5, 10, 5, 15],
[ 9, 3, 0, 6, 9]])
>>> y
array([[ nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan]])
>>> y[ x>15 ] = 1000
>>> y
array([[ 1000., nan, nan, 1000., nan],
[ 1000., 1000., nan, 1000., nan],
[ nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan]])
問題は次のような機能を追加するときです。
>>> def foo(x):
return x*2
>>> y[ x>15 ] = foo(x)
Warning (from warnings module):
File "__main__", line 1
FutureWarning: assignment exception type will change in the future
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
y[ x>15 ] = foo(x)
ValueError: boolean index array should have 1 dimension
かのような何か:
>>> _=foo(x)
>>> y[ x>15 ]=_
Traceback (most recent call last):
File "<pyshell#64>", line 1, in <module>
y[ x>15 ]=_
ValueError: boolean index array should have 1 dimension
それはもはや機能しない理由!
なぜ0の代わりにnanの行列が必要なのですか? –
あなたの最初の試みではスカラーを使います。 2番目の配列には2D配列があります。それらのサイズは一致しません。 'np.where(x> 15、foo(x)、y)'を使うことができます。 – ayhan
@IgnacioVergaraKausel私はいくつかの条件があります。それらのうちの1つでは、yは0でなければならず、他のyでは1でなければならず、そうでなければyは必ずナノでなければならない。私はナンが必要です。 –