0

次のコードがあります。

# unicorns is a numpy array with several fields
idx = (1, 2, 3, 5, 7)
unicorns=uni[idx]
# now i have only the first, second, third, ... unicorn
print unicorns

ただし、このユニコーン配列をサブ選択したい場合

unicorns['color'=='white']['Name']

これにより、白いユニコーンの名前が得られるはずです。numpy は のcolor==white部分のみを解釈しFalse、0 になり、配列の最初のエントリを返します。

白いユニコーンを選択して、このコードを修正するにはどうすればよいですか?

私はすべてがnumpyのままであることを望んでいるので、ユニコーン以外の他のプロパティも選択できます。

編集

配列の例を次に示します。

    unicorns=[(1, black, 0.0, 'Pinky', 1) (2, black, 0.0, 'Winky', 1)
 (3, white, 0.0, 'Lala', 1) (4, white, 0.0, 'Merlin', 1)
 (5, black, 0.0, 'Meriva', 1) (6, white, 0.0, 'Panda', 1)]
    idx = [  0 ,  3  , 6 ] 
4

3 に答える 3

4

有効な Python コードにするために、配列を少し変更する必要がありました。適切に変換した場合、あなたが探しているのは次のとおりだと思います。

unicorns[unicorns['color'] == 'white']['name']

import numpy as np

unicorns=[(1, 'black', 0.0, 'Pinky', 1), (2, 'black', 0.0, 'Winky', 1),
          (3, 'white', 0.0, 'Lala', 1), (4, 'white', 0.0, 'Merlin', 1),
          (5, 'black', 0.0, 'Meriva', 1), (6, 'white', 0.0, 'Panda', 1),
          ]
unicorns = np.array(unicorns,
                    dtype = [('id', '<i4'),
                             ('color', 'S10'),
                             ('val1', '<f4'),
                             ('name', 'S10'),
                             ('val2', '<i4')])

print(unicorns['color'] == 'white')
# [False False  True  True False  True]

print(unicorns[unicorns['color'] == 'white']['name'])
# ['Lala' 'Merlin' 'Panda']
于 2012-09-26T09:38:00.053 に答える
1

また、このような種類のスライス操作やクエリ操作に最適な pandas もご覧ください。あなたの問題は次のように解決できます:

In [12]: df = pd.DataFrame(unicorns)

In [13]: df.columns = ['id','color','speed','name','tails']

In [14]: df
Out[14]: 
  id  color speed    name tails
0  1  black   0.0   Pinky     1
1  2  black   0.0   Winky     1
2  3  white   0.0    Lala     1
3  4  white   0.0  Merlin     1
4  5  black   0.0  Meriva     1
5  6  white   0.0   Panda     1

In [16]: df[df.color == 'black']
Out[16]: 
  id  color speed    name tails
0  1  black   0.0   Pinky     1
1  2  black   0.0   Winky     1
4  5  black   0.0  Meriva     1

In [17]: df[df.color == 'black'].name
Out[17]: 
0     Pinky
1     Winky
4    Meriva
Name: name
于 2012-09-26T20:45:56.430 に答える
1

おそらく使いたいのはnumpy.where関数です。次のように使用します。

    >>>unicorns=np.array([[1, "black", 0.0, 'Pinky', 1] ,
                       [2, "black", 0.0, 'Winky', 1],
                       [3, "white", 0.0, 'Lala', 1],
                       [4, "white", 0.0, 'Merlin', 1],
                       [5, "black", 0.0, 'Meriva', 1],
                       [6, "white", 0.0, 'Panda', 1]])
    >>> np.where(unicorns[:,1] == "black")
    (array([0, 1, 4]),)
    >>> unicorns[np.where(unicorns[:,1] == "black")]
    array([['1', 'black', '0.0', 'Pinky', '1'],
    ['2', 'black', '0.0', 'Winky', '1'],
    ['5', 'black', '0.0', 'Meriva', '1']], 
    dtype='|S8')
于 2012-09-26T09:40:46.167 に答える