【问题标题】:Numpy TypeError: only length-1 arrays can be converted to Python scalars (reshape)Numpy TypeError:只有长度为 1 的数组可以转换为 Python 标量(重塑)
【发布时间】:2017-07-06 00:12:41
【问题描述】:

在Python中,如果我重塑一个数组,我一般没有问题:

arr1 = np.array([1,2,3,4])
print np.reshape(arr1, (2, 2, 1))

但是当我尝试重塑 10240 x 62 numpy ndarray 时遇到问题:

a1 = np.reshape(X_train_s, (X_train_s[0], X_train_s[1], 1))

错误是:

...in reshape
    return reshape(newshape, order=order)
TypeError: only length-1 arrays can be converted to Python scalars

ndarray X_train_s 包含 float32 数字。为什么我不能重塑数组?

【问题讨论】:

  • X_train_s[0] 不是 10240,X_train_s[1] 不是 62。这些是数组的第一行和第二行。如果你想要 10240 和 62,你应该索引X_train_s.shape
  • X_train[0] 返回一个数组。 10240x62 阵列的“行”。 shape 参数只接受标量,并且如错误消息所示,长度大于 1 的数组不能隐式转换为标量。
  • 这只是一个猜测,但您的第二个代码块中似乎缺少两个 .shape
  • 天哪....谢谢@user2357112
  • @user2357112 如果你把它写成答案,我会接受的。

标签: python arrays numpy


【解决方案1】:

您想要X_train_s 的第一维和第二维的长度,但是当您这样做时

(X_train_s[0], X_train_s[1], 1)

您获取了第一和第二整行,而不是第一和第二维度的长度。如果你想访问维度长度,你应该索引数组的shape

(X_train_s.shape[0], X_train_s.shape[1], 1)

您可能还想考虑将这个额外的长度为 1 的轴添加到数组的其他方法,例如使用 np.newaxis(又名None)进行索引:

a1 = X_train_s[:, :, np.newaxis]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-16
    • 2014-09-27
    • 2013-03-15
    • 1970-01-01
    • 2016-08-06
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多