【问题标题】:Why numpy.resize doesn't work with '-1' like numpy.reshape?为什么 numpy.resize 不适用于像 numpy.reshape 这样的“-1”?
【发布时间】:2020-09-05 12:54:30
【问题描述】:

我了解到numpy.reshape 并没有真正改变数组的形状。行。我可以改用numpy.resize。没关系。

我的问题是为什么“-1”符号不能使用“np.resize”?就像'np.reshape'一样......

myarray = np.arange(16)

myarray.resize((4,-1))

给我

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-606-aa09b20c947a> in <module>
      1 myarray = np.arange(16)
      2 
----> 3 myarray.resize((4,-1))

ValueError: negative dimensions not allowed

【问题讨论】:

    标签: python numpy resize reshape


    【解决方案1】:

    正如我检查的那样,resize 不允许否定参数。 它是 reshape 的一个功能(以及其他一些方法,但不是 resize)。

    如果您想要一个 new 数组,请将您的代码更改为:

    myNewArray = myarray.reshape((4,-1)).copy()
    

    就地改变形状的另一种解决方案:

    myarray.shape = (4, -1)
    

    在这里,您可以-1 作为新形状元组的一个元素传递。

    【讨论】:

      【解决方案2】:

      由于reshape(方法或函数)不会改变元素的总数,它可以安全地计算其中一个维度,给定其他维度。

      resize 可以更改元素的总数,因此它不能安全地对所需尺寸做出任何假设。

      查看其他numpy 函数和SO 答案中的代码,您会发现reshape 被广泛使用。它不就地运行的事实通常不是问题。它返回一个view(如果可能),所以时间不是问题。

      由于resize 可以改变元素的数量,它可能更危险(但有时更有用)。请记住,函数表单填充的值与方法表单不同。

      我经常用

      创建示例数组
      arr = np.arange(24).reshape(2,3,4)
      

      【讨论】:

        猜你喜欢
        • 2016-06-05
        • 2019-03-11
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多