【发布时间】:2019-06-15 10:26:13
【问题描述】:
我想在例程中使用 numpy 函数而不使用 for 循环。考虑下面的例子:
import numpy as np
data = np.linspace(1, 10, 10).astype(int)
test_elements = np.array([1, 2])
for test_elem in test_elements:
print(np.where(test_elem == data))
...
(array([0]),)
(array([1]),)
我已阅读其他帖子和 numpy 文档。常见的建议似乎是使用np.roll 滚动test_elements,或者使用其他技巧,例如跨步(我不完全理解)。我认为使用np.vectorize 对函数进行矢量化可能更容易,但我觉得这对于一个问题来说太过分了,必须有一个更简单的解决方案。任何指导将不胜感激?
【问题讨论】:
-
嗯...您的
data没有重复项吗?否则where的返回值可以是不同的长度(我猜即使在这里它也可以有不同的长度,好像test_elem不存在,结果会是空的),并且numpy 不擅长处理可变长度的东西。 -
在上面的例子中,它们都是唯一的。那只是因为我试图让问题变得简单。如果有重复条目,我计划在最后连接唯一元素。
-
更快的方法取决于您的实际数据的大小,以及您想对结果做什么。请记住,只有当
data的大小很小(而test_elements的大小很大)时,for 循环才会真正低效。
标签: python-3.x numpy for-loop vectorization where