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

您可能想要使用的是该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 回答
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 回答