根据你的问题的第一句话,你要基于另一个值来选择值列表或数组。
在numpy中,您可以使用索引从数组中获取选定的值。在本例中我使用Boolean indexing。这样可以避免将值附加到现有数组,但可以将所选值的副本作为数组提供给您。 您可以使用来自numpy或您自己的函数的&
或|
运算符,logic functions来组合多个条件。
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数组,而是使用向量化函数来操纵你的数组。
来源
2012-05-18 21:20:01
bmu
好的,这听起来不错。假设我有很多选择。如果该值通过'selection1',则将其放入'ar1'中,如果将'selection2'放入'ar2',....选项类似于'10
@wiso我改编了这个例子。 – bmu
谢谢,但这不是我在我的评论中提出的。作为输出我需要不同的集合,一个用于'10