9

文字列配列で numpy.where 関数を使用したいと思います。しかし、私はそうすることに失敗しています。誰かがこれを理解するのを手伝ってくれますか?

たとえばnumpy.where、次の例で使用すると、エラーが発生します。

import numpy as np

A = ['apple', 'orange', 'apple', 'banana']

arr_index = np.where(A == 'apple',1,0)

私は以下を取得します:

>>> arr_index
array(0)
>>> print A[arr_index]
>>> apple

Aただし、文字列が'apple'一致する文字列配列のインデックスを知りたいです。上記の文字列では、これは 0 と 2 で発生します。ただし、 はnp.where2 ではなく 0 のみを返します。

numpy.whereでは、文字列を操作するにはどうすればよいでしょうか。前もって感謝します。

4

3 に答える 3

12
print(a[arr_index])

ありませんarray_index!!

a = np.array(['apple', 'orange', 'apple', 'banana'])

arr_index = np.where(a == 'apple')

print(arr_index)

print(a[arr_index])
于 2013-05-20T03:16:38.250 に答える
0

where を適切に使用するには、リストの代わりに配列を使用する必要があります (また、1 と 0 の代わりに True と False を使用して、マスクを取得してインデックスを検索します)。

A = ['apple', 'orange', 'apple', 'banana']
arr_mask = np.where(np.array(A) == 'apple',True,False)
arr_index = np.arange(0, len(A))[arr_mask]

このようにして、 arr_index を次のように取得します: np.array([0,2])

マスク arr_mask またはインデックス arr_index を使用して A の値を検索するには、A が配列である必要があることに注意してください。

In [55]: A = ['apple', 'orange', 'apple', 'banana'] 
    ...: arr_mask = np.where(np.array(A) == 'apple',True,False) 
    ...: arr_index = np.arange(0, len(A))[arr_mask]                                                             

In [56]: A[arr_mask]                                                                                            
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-56-f8b153319425> in <module>
----> 1 A[arr_mask]

TypeError: only integer scalar arrays can be converted to a scalar index

In [57]: A[arr_index]                                                                                           
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-57-91c260fe71ab> in <module>
----> 1 A[arr_index]

TypeError: only integer scalar arrays can be converted to a scalar index

In [58]: B = np.array(A)                                                                                        

In [59]: B[arr_mask]                                                                                            
Out[59]: array(['apple', 'apple'], dtype='<U6')

In [60]: B[arr_index]                                                                                           
Out[60]: array(['apple', 'apple'], dtype='<U6')

リストだけを使用して取得しているのは、関数 np.where() が条件が満たされる場所を見つけられないことです。試してみると:

A = ['apple', 'orange', 'apple', 'banana']
arr_index = np.where(A == 'orange',1,0)

出力として再び array(0) が得られます。

于 2020-06-11T10:46:11.930 に答える