#開発環境
Jupyter notebook (python3)
#やりたかったこと
numpy配列の要素が数字の場合は指定した条件に一致するかをnumpy.bool_型の配列で返してくれるが,文字列だとうまく反応しないのでfrompyfuncを使って実装しようとした.
(リスト内包表記で実装できるのは理解しています)
##数字の場合
python
1a= np.array([0,1,2,3,4]) 2print((a > 2)) 3print(a[(a > 2)])
<出力>
[False False False True True] [3 4]
要素ごとに条件に一致しているか確認してくれている.
##文字列の場合
python
1a= np.array(['0L','1L','2T','3T','4L']) 2print('L' in a)
<出力>
False
要素ごとではなくnumpy配列全体に対して条件を確認してしまっている.これだとa[('L' in a)]
としても上手くいかない.
##frompyfuncでの実装
python
1A = np.array(['0L','1L','2T','3T','4L']) 2 3def __in(x,y): 4 return (x in y) 5 6b = np.array([True,True,False,False,True]) 7c = [True,True,False,False,True] 8d = np.frompyfunc(__in, 2,1)('L',A) 9 10print(type(b)) 11print(type(b[0])) 12print(b) 13print(A[b]) 14 15print(type(c)) 16print(type(c[0])) 17print(c) 18print(A[c]) 19 20print(type(d)) 21print(type(d[0])) 22print(d) 23print(A[d])
<出力>
<class 'numpy.ndarray'> <class 'numpy.bool_'> [ True True False False True] ['0L' '1L' '4L'] <class 'list'> <class 'bool'> [True, True, False, False, True] ['0L' '1L' '4L'] <class 'numpy.ndarray'> <class 'bool'> [True True False False True] --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-318-4e8bb2be31b9> in <module>() 21 print(type(d[0])) 22 print(d) ---> 23 print(A[d]) IndexError: arrays used as indices must be of integer (or boolean) type
numpy配列と通常のリストは上手くいってますが,np.frompyfuncのみエラーをはいています.
また,int型かbool型を使えとありますが出力の通り各要素はbool型になっています.
list(np.frompyfunc(__in, 2,1)('L',A))
のようにリストに変換してからだと上手くいくのですがこの場合何が問題なのでしょうか.
回答1件
あなたの回答
tips
プレビュー