我试图使用numpy.reshape重塑数组,但总是遇到索引错误
"IndexError: index 15484 is out of bounds for axis 0 with size 7231"
然后我打印出阵列的形状
(7231,80,60,4)
我的代码是
X = np.array([i[0] for i in train]).reshape(-1,80,60,1)
(我试图将我的所有图像重塑为(-1,80,60,1))
我认为-1自动填充尺寸,所以我很困惑为什么我收到这个错误?
火车是:
train = train_data[:-500]
和train_data是一个包含图像像素和标签元组的数组
有人能帮我吗?
3 回答
你拥有的代码没有按照你的想法去做 .
i[0]
获取第一个轴中的第0个元素,即80
,这不是您想要的 .无论如何,你真正想要的是选择最快方向的第一片,所以这样做:
如果您的数据实际上不是您所说的大小,请尝试:
重塑形状数组
(7231,80,60,4)
- >(-1,80,60,1)
确实"just work":输出:
所以你要重新尝试的问题 . 我的猜测是你的问题可能与
train_data
数组的形式/内容有关(或者你试图用np.array([i[0] for i in train])
从它创建的数组) . 当然,问题也可能出在您未在问题中发布的代码部分 . 如果您发布了更多的实际代码,那可能会有所帮助 .特别是,当您收到错误消息时:
它应该包含一个堆栈跟踪,它直接指向代码中有问题的行 . 堆栈跟踪是否表示从您创建
X
的行中引发了错误:或者它是否指向代码中的不同行?
重塑时要小心 . 即使它有效,元素的排列可能也不是你想要的 .
从一个我们可以想象的简单数组开始:
重塑为(-1,2,1) - 但让我们删除最后一个以获得更紧凑的显示:
注意原始[0,1,2,3]行如何分成2行 .
重新分配大小4的最后一个维度的另一种方法是:
如果我们使用
np.stack
并获得(4,3,2)形状,那可能会更清楚x.transpose(2,0,1)
产生同样的事情 .reshape
保留了元素的散乱/扁平顺序 . 转置会改变它 .