如何让Numpy将对象数组切片解析为单个数组?
无需双重拷贝合并Numpy对象数组中的数组元素
解决方案
当你从对象数组中取出包含numpy数组的切片后,可通过以下几种方式直接合并为多维数组,无需先转成list:
- 使用
np.stack()堆叠元素np.stack()会遍历切片中的每个numpy数组,自动沿着新轴将它们堆叠,生成目标形状:
import numpy as np aa = np.array([np.random.randn(3, 4), {'something': 'blah'}], dtype=object) result = np.stack(aa[0:1]) print(result.shape) # 输出 (1, 3, 4)
- 指定dtype创建数组
如果确定切片内的所有元素都是同形状的数值数组,可直接指定目标dtype创建数组,numpy会自动将对象数组中的元素转换并合并:
result = np.array(aa[0:1], dtype=np.float64) print(result.shape) # 输出 (1, 3, 4)
为什么np.array(aa[0:1])无法得到预期结果
因为aa[0:1]本身是对象类型的数组,np.array()默认会将其视为包含对象的序列,因此输出仍然是对象数组,不会尝试合并内部的numpy数组。而上述方法会主动识别元素为numpy数组,完成维度合并。
说明
这些方法都避免了aa[0:1].tolist()这类中间转换步骤,无需双重拷贝操作。需要注意的是,若切片内的元素形状不一致,这些方法会报错,需保证待合并的数组形状统一。
内容的提问来源于stack exchange,提问作者Multihunter
相关产品推荐
相关产品推荐

