从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向量生成数字对数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python: 向量矩阵和多维数组(基于NumPy库)

R在向量重复函数中保持随机函数

从 Numpy 中的 N 个向量中找到所有唯一的(几乎)平行 3d 向量对的最快方法

numpy如何沿维度拆分数组?

Python Numpy中的几个矩阵乘法

将数组的列作为向量执行“for循环”时,Cupy 比 numpy 慢