如何将由二维数组构成的二维numpy数组合并为(6,3)的单一二维数组
问题:将对象类型二维数组合并为(6,3)的单一数组
给定如下模拟代码生成的对象类型二维数组t:
import numpy as np n=3 x = np.random.randint(0,10, (n,1)) y = np.random.randint(0,10, (n,2)) t = np.empty((2,2), object) t[0,:] = [x,y] t[1,:] = [x+10,y+10]
需要将t合并为尺寸为(6,3)的单一数组,使其输出与np.vstack([np.hstack([x,y]), np.hstack([x,y])+10])的结果一致。
解决方法
方法1:按行拼接后垂直堆叠
直接遍历t的每一行,对每行的两个子数组执行水平拼接,再将结果垂直堆叠:
result = np.vstack([np.hstack(row) for row in t])
- 逻辑:
t[0]对应[x,y],np.hstack(t[0])得到与np.hstack([x,y])相同的(3,3)数组;t[1]对应[x+10,y+10],np.hstack(t[1])等价于np.hstack([x,y])+10,最后垂直堆叠两个数组得到(6,3)的结果。
方法2:按列拼接后水平合并
先对t的每一列执行垂直拼接,再将拼接后的列数组水平合并:
# 垂直拼接第一列的两个子数组 col0 = np.vstack(t[:, 0]) # 垂直拼接第二列的两个子数组 col1 = np.vstack(t[:, 1]) # 水平合并两列得到最终结果 result = np.hstack([col0, col1])
- 逻辑:
t[:,0]包含x和x+10,垂直拼接后得到(6,1)的数组;t[:,1]包含y和y+10,垂直拼接后得到(6,2)的数组,水平合并后恰好是(6,3)的目标尺寸,且内容与参考代码输出完全一致。
内容的提问来源于stack exchange,提问作者guyguyguy12345
相关产品推荐
相关产品推荐

