【问题标题】:why I cannot reshape or resize my numpy array为什么我不能重塑或调整我的 numpy 数组的大小
【发布时间】:2021-03-05 11:19:15
【问题描述】:

我有以下输出

 [  1.   3.   5.   7.   9.  11.  13.  15.  17.  19.  21.  23.  25.  27.
    29.  31.  33.  35.  37.  39.  41.  43.  45.  47.  97.  99. 101. 103.
    105. 107. 109. 111. 113. 115. 117. 119. 121. 123. 125. 127. 129. 131.
    133. 135. 137. 139. 141. 143.]

我想把它改成下面的样子

[[1.   3.   5.   7.   9.   11.  13.  15.]
 [17.  19.  21.  23.  25.  27.  29.  31.]
 [33.  35.  37.  39.  41.  43.  45.  47.]
 [97.  99. 101. 103.  105. 107. 109. 111.]
 [113. 115. 117. 119. 121. 123. 125. 127.]
 [129. 131. 133. 135. 137. 139. 141. 143.]]

我尝试使用a.resize(6, 8),但它给了我这个错误:“调整大小仅适用于单段数组” 此外,当我尝试使用a.reshape(6, 8) 时,它给了我相同的数组。 我不明白这是什么原因,因为我已经测试了另一个阵列并且运行良好。

【问题讨论】:

  • reshape 无法就地工作。它返回一个新数组:b = a.reshape(6,8)resize 方法确实可以就地工作,但结果是对它所使用的数组类型很挑剔。除非我们需要更改元素的总数,否则我们通常使用reshape

标签: python python-3.x numpy resize reshape


【解决方案1】:

试试a.reshape((8, 6)) 注意双括号

a = np.array([1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27.,
              29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 97., 99., 101., 103.,
              105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131.,
              133., 135., 137., 139., 141., 143.])
print(a.reshape((8, 6)))

出来:

[[  1.   3.   5.   7.   9.  11.]
 [ 13.  15.  17.  19.  21.  23.]
 [ 25.  27.  29.  31.  33.  35.]
 [ 37.  39.  41.  43.  45.  47.]
 [ 97.  99. 101. 103. 105. 107.]
 [109. 111. 113. 115. 117. 119.]
 [121. 123. 125. 127. 129. 131.]
 [133. 135. 137. 139. 141. 143.]]

Process finished with exit code 0

请注意,对于您请求的输出,尺寸应该是

a.reshape((6,8))

出来:

[[  1.   3.   5.   7.   9.  11.  13.  15.]
 [ 17.  19.  21.  23.  25.  27.  29.  31.]
 [ 33.  35.  37.  39.  41.  43.  45.  47.]
 [ 97.  99. 101. 103. 105. 107. 109. 111.]
 [113. 115. 117. 119. 121. 123. 125. 127.]
 [129. 131. 133. 135. 137. 139. 141. 143.]]

Process finished with exit code 0

您可以在此处阅读有关 NumPy 重塑的信息:reshape documentation

【讨论】:

  • 哦,对不起,我犯了一个错误。我放在这里的初始数组是我的输出。我编辑了。
  • 初始数组是numpy.ndarray。
  • x.reshape((4,5))x.reshape(4,5) 都可以。对于np.zeros,元组形状是必需的,但reshape 方法允许。
  • 我还是听不懂。我有一个变量 a,它是一个 。我尝试对其他 numpy.ndarray 变量进行整形,它有效,但在这里它给了我相同的数组。
【解决方案2】:

试试

b = a.reshape((8,6))

并记住两件事,以备将来使用类似方法:

  1. reshape 方法将一个元组作为输入,在这种情况下 (8,6) ,调用 b = a.reshape(8,6) 会为该方法提供 2 个 int 参数,而不是它期望的元组。始终注意预期值。您可以通过将鼠标悬停在 pycharm 和大多数编辑器中的函数上来进行调查。

  2. 在 numpy 中,许多方法不会操作给定的对象,而是返回一个新值供您使用。 始终在文档中检查这一点是健康的,以避免灾难性的心碎,相信我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多