为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Numpy.Reshape 重塑数组

使用 Numpy.Reshape 重塑数组

喵喔喔 2021-09-11 19:13:22
我正在尝试使用 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 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

整形时要小心。即使它有效,元素的排列也可能不是你想要的。


从一个我们可以形象化的简单数组开始:


In [805]: x = np.arange(24).reshape(3,2,4)

In [806]: x

Out[806]: 

array([[[ 0,  1,  2,  3],

        [ 4,  5,  6,  7]],


       [[ 8,  9, 10, 11],

        [12, 13, 14, 15]],


       [[16, 17, 18, 19],

        [20, 21, 22, 23]]])

重塑为 (-1,2,1) - 但让我们删除最后 1 以获得更紧凑的显示:


In [807]: x.reshape(-1,2)

Out[807]: 

array([[ 0,  1],

       [ 2,  3],

       [ 4,  5],

       [ 6,  7],

       [ 8,  9],

       [10, 11],

       [12, 13],

       [14, 15],

       [16, 17],

       [18, 19],

       [20, 21],

       [22, 23]])

注意原始 [0,1,2,3] 行是如何分成 2 行的。


另一种重新分配大小为 4 的最后一个维度的方法是:


In [808]: np.vstack([x[...,i] for i in range(4)])

Out[808]: 

array([[ 0,  4],

       [ 8, 12],

       [16, 20],

       [ 1,  5],

       [ 9, 13],

       [17, 21],

       [ 2,  6],

       [10, 14],

       [18, 22],

       [ 3,  7],

       [11, 15],

       [19, 23]])

如果我们使用np.stack并得到 (4,3,2) 形状,那可能会更清楚


array([[[ 0,  4],

        [ 8, 12],

        [16, 20]],

  ....

x.transpose(2,0,1) 产生同样的东西。


reshape保留元素的散乱/扁平顺序。转置改变它。


In [812]: x.transpose(2,0,1).ravel()

Out[812]: 

array([ 0,  4,  8, 12, 16, 20,  1,  5,  9, 13, 17, 21,  2,  6, 10, 14,...])

In [813]: x.reshape(-2,2).ravel()

Out[813]: 

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, ...])


查看完整回答
反对 回复 2021-09-11
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您拥有的代码没有做您认为的那样。i[0]获取第一个轴上的第 0 个元素,即您的80,这不是您想要的。

无论如何,您真正想要的是选择最快方向的第一个切片,所以只需执行以下操作:

X = train[:,:,:,0:1]

如果您的数据实际上不是您所说的大小,请尝试:

X = np.array([i.reshape(80, 60, 4)[:,:,0:1] for i in train])


查看完整回答
反对 回复 2021-09-11
  • 3 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号