gpt4 book ai didi

python - 在 1 行中进行两次 for 循环以创建一个新的元组列表

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:43 24 4
gpt4 key购买 nike

我有两组坐标作为 numpy 数组。我会根据每组的第一个元素创建一个新坐标。

a = np.array([[1,2],[3,4],[5,6]])
b = np.array([[10,20],[30,40],[50,60]])

所以我想得到

[(1,10), (3,30), (5, 50)]

我试过:

c = [(i[0], j[0]) for (i,j) in itertools.product(a,b)]

但它返回了:

[(1, 10), (1, 30), (1, 50), (3, 10), (3, 30), (3, 50), (5, 10), (5, 30), (5, 50)]

这是一个嵌套循环。这里有一条线解决方案吗?

非常感谢

J

最佳答案

如果你想要结果作为元组,首先将它们沿着第二个轴与 np.c_ 连接起来,将结果视为元组数组并使用 ravel 展平结果:

np.c_[a[:,0],b[:,0]].view('i,i').ravel()
# array([(1, 10), (3, 30), (5, 50)], dtype=[('f0', '<i4'), ('f1', '<i4')])

请注意,使用 numpy 的向量化运算获取结果将在性能方面带来巨大好处:

a = np.array([[1,2],[3,4],[5,6]])
b = np.array([[10,20],[30,40],[50,60]])
a = np.concatenate([a]*10000)
b = np.concatenate([b]*10000)

%timeit [(a_s[0], b_s[0]) for a_s, b_s in zip(a,b)]
# 19.2 ms ± 1.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit np.c_[a[:,0],b[:,0]].view('i,i').ravel()
# 82.1 µs ± 7.73 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

关于python - 在 1 行中进行两次 for 循环以创建一个新的元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57108112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com