我需要重塑 numpy 数组以绘制一些数据。以下工作正常:import numpy as nptarget_shape = (350, 277)arbitrary_array = np.random.normal(size = 96950)reshaped_array = np.reshape(arbitrary_array, target_shape)但是,如果不是形状数组 (96950, ) 我有一个元组数组,每个元组有 3 个元素 (96950,3) 我得到了一个cannot reshape array of size 290850 into shape (350,277)这里是复制错误的代码array_of_tuple = np.array([(el, el, el) for el in arbitrary_array])reshaped_array = np.reshape(array_of_tuple, target_shape)我猜 reshape 正在做的是展平元组数组(因此大小为 290850),然后尝试对其进行整形。但是,我想要的是形状为 (350, 277) 的元组数组,基本上忽略了第二维,只是将元组重塑为标量。有没有办法实现这一目标?
3 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
你可以改造成(350, 277, 3):
>>> a = np.array([(x,x,x) for x in range(10)])
>>> a.reshape((2,5,3))
array([[[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4]],
[[5, 5, 5],
[6, 6, 6],
[7, 7, 7],
[8, 8, 8],
[9, 9, 9]]])
从技术上讲,结果不会是一个 350x277 的 3 元组的 2D 数组,而是一个 350x277x3 的 3D 数组,但您array_of_tuple的实际“元组数组”也不是一个 2D 数组。
蛊毒传说
TA贡献1895条经验 获得超3个赞
reshaped_array=np.reshape(array_of_tuple,(350,-1))
reshaped_array.shape
给出 (350, 831)
由于覆盖数组的整个元素的列号和行号不匹配,您收到错误
350*831= 290850 where as
350*277=96950
因此 numpy 不知道如何处理数组的附加元素,您可以尝试减小数组的原始大小以减少元素数量。如果您不想删除元素,则
reshape(350,277,3)
是一种选择
添加回答
举报
0/150
提交
取消