Python 在1行中双击for循环以创建新的元组列表

Python 在1行中双击for循环以创建新的元组列表,python,numpy,Python,Numpy,我有两组坐标作为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,5

我有两组坐标作为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

如果要将结果作为元组,请首先沿第二个轴将它们连接在一起,将结果视为元组数组,并使用以下命令展平结果:


如果要将结果作为元组,请首先沿第二个轴将它们连接起来,然后将结果作为元组数组查看,并使用以下命令展平结果:

尝试内置功能:

尝试内置功能:

连接[a[:,:,无]、b[:,:,无]、轴=2 温度arr[:,0] 数组[[1,10], [ 3, 30], [ 5, 50]] 连接[a[:,:,无]、b[:,:,无]、轴=2 温度arr[:,0] 数组[[1,10], [ 3, 30], [ 5, 50]]
Slice and stack-np.c_u1;[a[:,0],b[:,0]]。使用zip而不是itertools.product您是否有意将结果中的元组列表写入与输入中的numpy数组相反的位置,因此您是否也需要这种类型转换,或者您只需要提取和重新排列所描述的元素?这是通往罗马的另一条路, 1[:, ::2] ... :Slice and stack-np.c_u1;[a[:,0],b[:,0]]。使用zip而不是itertools.product您是否有意将结果中的元组列表写入与输入中的numpy数组相反的位置,因此您是否也需要这种类型转换,或者您只需要提取和重新排列所描述的元素?这是通往罗马的另一条路, 1[:, ::2] ... :这太棒了。我也不知道concat法比zipHi法更有效。我的数据实际上是浮点数而不是整数。当我尝试查看'f,f'时,它完全改变了值。显然,我不知道如何正确使用视图。这又一次提出了一个问题:你真的需要一个元组列表,因此这里的view/ravel部分,还是一个2D numpy数组还不够充分?@J_yang你可以用np.c_[a[:,0],b[:,0]]实现同样的效果。view'float,float'。ravelThis很棒。我也不知道concat法比zipHi法更有效。我的数据实际上是浮点数而不是整数。当我尝试查看'f,f'时,它完全改变了值。显然,我不知道如何正确使用视图。这又一次提出了一个问题:你真的需要一个元组列表,因此这里的view/ravel部分,还是一个2D numpy数组不完全足够?@J_yang你可以用np.c_U9;[a[:,0],b[:,0]]实现同样的效果。view'float,float'。ravel
np.c_[a[:,0],b[:,0]].view('i,i').ravel()
# array([(1, 10), (3, 30), (5, 50)], dtype=[('f0', '<i4'), ('f1', '<i4')])
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)
print([(a_s[0], b_s[0]) for a_s, b_s in zip(a,b)])
# [(1, 10), (3, 30), (5, 50)]