如何重塑元组数组

我需要重塑 numpy 数组以绘制一些数据。以下工作正常:


import numpy as np

target_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) 的元组数组,基本上忽略了第二维,只是将元组重塑为标量。有没有办法实现这一目标?


桃花长相依
浏览 118回答 3
3回答

慕运维8079593

你可以改造成(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 数组。

蛊毒传说

reshaped_array=np.reshape(array_of_tuple,(350,-1))reshaped_array.shape给出 (350, 831)由于覆盖数组的整个元素的列号和行号不匹配,您收到错误350*831= 290850   where as350*277=96950 因此 numpy 不知道如何处理数组的附加元素,您可以尝试减小数组的原始大小以减少元素数量。如果您不想删除元素,则reshape(350,277,3)是一种选择
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python