根据您问题中的第一句话,您希望根据另一个列表或数组中的值来选择值。
在 numpy 中,您可以使用索引从数组中获取选定的值。我在示例中使用布尔索引。这避免了将值附加到现有数组的需要,但会为您提供所选值的副本作为数组。&
您可以使用or|
运算符、numpy中的逻辑函数或您自己的函数来组合多个条件。
In [1]: import numpy as np
In [2]: size = int(1E7)
In [3]: ar = np.arange(size)
In [4]: ar2 = np.random.randint(100, size=size)
In [5]: %timeit ar[(ar2 > 50) & (ar2 < 70) | (ar2 == 42)]
10 loops, best of 3: 249 ms per loop
如果您需要根据不同的条件(或评论中给出的范围)在单独的数组中进行每个选择,您可以执行以下操作:
conditions = [(10, 20), (20, 50)] # min, max as tuples in a list
results = {}
for condition in conditions:
selection = ar[(ar2 > condition[0]) & (ar2 < condition[1])]
# do something with the selection ?
results[condition] = selection
print results
会给你类似的东西
{(20, 50): array([ 2, 6, 7, ..., 9999993, 9999997, 9999998]),
(10, 20): array([ 1, 3, 66, ..., 9999961, 9999980, 9999999])}
一般来说,您应该避免循环遍历一个 numpy 数组,而是使用矢量化函数来操作您的数组。