【问题标题】:Python array reshapePython数组重塑
【发布时间】:2018-02-20 16:01:59
【问题描述】:

我正在尝试将 (1000,28,28) 的数组重塑为 (1000,784) 的数组,其中两个 28 相乘以使一个 784 并被卡住。任何建议将不胜感激。

抱歉,更具体地说,我正在尝试按如下方式导入 MNIST 数据集:

import numpy as np
import struct
import io
def read_idx(filename):
with open(filename,'rb',)as f:
    zero, data_type, dims = struct.unpack('>HBB', f.read(4))
    shape = tuple(struct.unpack('>I', f.read(4))[0] for d in range(dims))

    return np.fromstring(f.read(), dtype=np.uint8).reshape(shape)
data= read_idx("t10k-images.idx3-ubyte")
x=data
len(x)
a=np.array(x)
print(a.shape)
a= np.reshape(x,(1000,784))

【问题讨论】:

  • 在一般情况下,您尝试完成什么?即乘以列表中的所有值,仅乘以列表中的最后两个元素
  • @KarlGraham 他不是在尝试将值相乘,而是在谈论两个数组的长度,如 28 * 28 = 784
  • 是的,不是相乘而是组合长度
  • 那么问题出在哪里?

标签: python arrays numpy reshape


【解决方案1】:

如果我可以进一步添加解决方案,这样您将获得相同的答案,而无需注意数组的确切形状。如果明天尺寸发生变化,下面的代码仍然有效;只要它仍然是三维的。干杯!

arr = np.zeros((1000,28,28))
new_arr = arr.reshape(*arr.shape[:1], -1)
print(new_arr.shape)

【讨论】:

    【解决方案2】:

    我很笨,错过了一个零,这解决了所有问题:

    a= np.reshape(a,(10000,784))
    

    【讨论】:

      猜你喜欢
      • 2021-05-31
      • 1970-01-01
      • 2021-01-31
      • 2021-06-05
      • 2021-12-31
      • 1970-01-01
      • 2016-02-11
      • 2017-07-22
      相关资源
      最近更新 更多