从2个numpy向量生成数字对数组[重复]
Posted
技术标签:
【中文标题】从2个numpy向量生成数字对数组[重复]【英文标题】:Generate array of number pairs from 2 numpy vectors [duplicate] 【发布时间】:2014-03-06 07:05:06 【问题描述】:在 Numpy 中是否有一种简单的方法可以从 2 个 1D numpy 数组(向量)生成数字对数组而无需循环?
输入:
a = [1, 2, 3]
b = [4, 5, 6]
输出:
c = [(1,4), (1,5), (1,6), (2,4), (3,5), (2,6), (3,4), (3,5), (3,6)]
我想知道是否有一个函数可以做类似的事情:
c = []
for i in range(len(a)):
for j in range(len(b)):
c.append((a[i], b[j]))
【问题讨论】:
【参考方案1】:您可以为此使用itertools.product
:
from itertools import product
c = list(product(a, b))
这给出了:
c == [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
【讨论】:
我会接受这个答案,因为它是有效的,但是我使用简单的列表理解就可以解决它:c = [(i, j) for i in a for j in b]
c中一个元素的每个坐标是怎么引用的?
对于未来的任何人,您都可以执行以下操作:ordered_pairs = np.column_stack((a, b))
...返回[[1 4][2 5][3 6]]
用于操作问题。 @Subzero-273K - 回答您,您可以使用以下命令访问有序对中的每个元素:ordered_pairs[0, 0]
,这将导致返回 1。如果您想在每个元素中选择第二个数字,您可以使用[:, 1]
我很想看到一个解决方案,它保留在 numpy 中,以避免 Python 循环的开销。广播、花式索引、矢量化等。
我有一个稍微不同的问题,但这个解决方案可以提供帮助。我想从一个数组中生成所有对。例如。 x=[1, 2, 3] 将给出 [1, 2], [1, 3], [2, 3] 我可以使用 product(x, x)。是否有抑制“自我”的选项,例如 [1, 1]?以上是关于从2个numpy向量生成数字对数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章