You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个指定形状的numpy数组拼接为(5741, 2)形状的数组?

解决方法:将两个NumPy数组按行打包为(5741, 2)形状的数组

你想要的不是常规的列拼接(那样会得到(5741, 20011)的数组),而是把每个原数组的对应行作为新数组的两个元素,组成一个每行包含两个子数组的(5741, 2)数组对吧?下面是两种可行的实现方式:

方法一:初始化Object类型数组赋值

因为我们要在数组里存储子数组(而非单个数值),需要使用dtype=object的NumPy数组,这样才能容纳不同长度的数组元素:

import numpy as np

# 模拟你的输入数组
arr1 = np.random.rand(5741, 20000)
arr2 = np.random.rand(5741, 11)

# 创建形状为(5741, 2)的空object数组
result = np.empty((arr1.shape[0], 2), dtype=object)

# 将两个数组的每行分别赋值给结果的两列
result[:, 0] = list(arr1)
result[:, 1] = list(arr2)

# 验证形状
print(result.shape)  # 输出 (5741, 2)
# 验证第一行内容
print(result[0])  # 输出 [array([0.xxx, 0.xxx, ...]), array([0.yyy, 0.yyy, ...])]

方法二:列表推导式转换

用列表推导式先生成包含对应行元组的列表,再转换为object类型的NumPy数组,写法更简洁:

import numpy as np

arr1 = np.random.rand(5741, 20000)
arr2 = np.random.rand(5741, 11)

# 列表推导式生成每行的元组,再转为object数组
result = np.array([(arr1[i], arr2[i]) for i in range(arr1.shape[0])], dtype=object)

print(result.shape)  # 输出 (5741, 2)

注意事项

  • 必须指定dtype=object:NumPy默认的数值类型数组无法直接存储子数组,object类型允许存储任意Python对象,包括NumPy数组。
  • 这种方式不会改变原数组的数据,只是创建了一个包含原数组行引用的新数组(如果需要拷贝数据,可以在赋值时加上.copy(),比如result[:,0] = [row.copy() for row in arr1])。

内容的提问来源于stack exchange,提问作者UrmLmn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:41:54