Python中如何按要求压缩一维与二维Numpy数组?
解决方案
要实现你期望的配对方式,核心是遍历二维数组的每一行,将该行的每个元素与一维数组对应位置的元素配对,而不是把一维数组的元素和二维数组的整行配对。这里用列表推导式就能轻松实现:
import numpy as np arr2D = [[5.88964708e-02, -2.38142395e-01, -4.95821417e-01, -7.07269274e-01], [0.53363666, 0.1654723 , -0.16439857, -0.44880487]] arr2D = np.asarray(arr2D) arr1D = np.arange(7, 8.5+0.5, 0.5) arr1D = np.asarray(arr1D) # 生成期望的配对结果 res = [list(zip(arr1D, row)) for row in arr2D] # 按你期望的格式打印 for sublist in res: print([sublist])
运行这段代码后,输出会和你期望的完全一致:
[[(7.0, 0.0588964708), (7.5, -0.238142395), (8.0, -0.495821417), (8.5, -0.707269274)]] [[(7.0, 0.53363666), (7.5, 0.1654723), (8.0, -0.16439857), (8.5, -0.44880487)]]
为什么原来的代码不符合预期?
你原来的np.array(list(zip(arr1D, arr2D)))逻辑是把arr1D的每个元素和arr2D的整行做配对:
arr1D有4个元素(7.0,7.5,8.0,8.5),arr2D有2行,所以zip会以最短的序列(也就是arr2D的2行)为准,只生成2组配对:(7.0, arr2D第一行)、(7.5, arr2D第二行),这就导致了之前的输出结果。
而我们需要的是对arr2D的每一行,都和整个arr1D做元素级的配对,所以用[list(zip(arr1D, row)) for row in arr2D]遍历每一行,再逐个配对,就能得到你要的结构。
内容的提问来源于stack exchange,提问作者Joanne
相关产品推荐
相关产品推荐

