【发布时间】:2021-02-06 10:18:27
【问题描述】:
我知道这是一个非常琐碎的问题,但我无法找到合适的解决方案。我有两个从两个不同的元组列表创建的 numpy 数组。
a = np.array([(1, 2), (3, 4), (5, 6)....])
b = np.array([(100, 200), (300, 400), (500, 600)....])
我有一个函数,它将两个元组作为输入并返回单个值作为输出
def myfunc(x, y):
.....
return val
vectorized_myfunc = np.vectorize(myfunc, signature='(n),(n)->()')
我想要达到的目标:
- 使用
b中的每个元素生成a中的所有元素组合。喜欢((1, 2), (100, 200)), ((1, 2), (300, 400)).. - 将生成的组合传递给
vectorized_myfunc。 - 如果我想动态生成这些组合的块,然后执行 1) 和 2),该怎么办?
PS:我知道我可以使用itertools.product(..),但它很慢。
PPS:我尝试使用 np.stack(np.meshgrid(a, b), -1).reshape(-1, 2, 3),然后尝试将其传递给 vectorized_myfunc,但无法正常工作
我愿意为它使用numpy、dask 甚至numba
【问题讨论】:
-
有些行为不符合您的要求。当您创建 a 和 b 时,它们失去了不可变的属性。所以直接用元组创建一个元组列表是不可能的,因为它们不再是元组了。
-
那是一个错字。已更正
-
您的问题仍然包括带有元组的 np.arrays。在你告诉你想要实现什么的那一行,你想要的结果是一个元组的元组。
标签: python arrays numpy vectorization