将条件从字符串传递到numpy where

时间:2018-04-06 13:14:37

标签: python numpy where

我有一系列条件可能因选择的名称而异。我想知道是否有一种方法可以从一组字符串构造python numpy的条件。下面是一个示例程序。我想要的是能够在a[ind]的两个实例中获得相同的结果。

import numpy as np

a = np.arange(10) 
ind = np.where((a>6) | (a<3))
print a[ind]

select = 'c'
if (select == 'c'):
    sel0 = '(a>6)'

sel = sel0 + ' | (a<3)'
print sel

ind = np.where(sel)
print a[ind]

这是我目前得到的输出:

[0 1 2 7 8 9]
(a>6) | (a<3)
[0]

1 个答案:

答案 0 :(得分:1)

您可以评估文字sel

ind = np.where(eval(sel))
print(a[ind])
# [0 1 2 7 8 9]

但为什么甚至使用字符串文字?

select = 'c'
if select == 'c':
    sel0 = a>6

sel = sel0 | (a<3)
print(sel)

ind = np.where(sel)
print(a[ind])
# [0 1 2 7 8 9]

只要遵循相同的操作顺序,评估条件的位置实际上并不重要。无论您在何处评估条件,sel始终等于:

[ True  True  True False False False False  True  True  True]

使用该布尔数组,where将始终生成相同的输出。