Python 调整使用linspace创建的数组的大小:数组不拥有其数据

Python 调整使用linspace创建的数组的大小:数组不拥有其数据,python,python-3.x,numpy,numpy-ndarray,Python,Python 3.x,Numpy,Numpy Ndarray,我正在使用linspace创建一个数组: >> a = np.linspace(0, 4, 9) >> a >> array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ]) 我成功地调整了它的大小,如下所示: >> a.resize(3, 3) >> a >> array([[0. , 0.5, 1. ], [1.5, 2. , 2.5], [3.

我正在使用linspace创建一个数组:

>> a = np.linspace(0, 4, 9)
>> a
>> array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ])
我成功地调整了它的大小,如下所示:

>> a.resize(3, 3)
>> a
>> array([[0. , 0.5, 1. ],
       [1.5, 2. , 2.5],
       [3. , 3.5, 4. ]])
a.resize(4, 2, refcheck=False)
但是,当我尝试按如下方式调整其大小时:

>> a.resize(3, 3)
>> a
>> array([[0. , 0.5, 1. ],
       [1.5, 2. , 2.5],
       [3. , 3.5, 4. ]])
a.resize(4, 2, refcheck=False)
这给了我以下错误:
值错误:无法调整此数组的大小:它不拥有其数据

当我创建相同的值数组并调整其大小时,数组的大小成功调整:

>> b = np.array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ])
>> b.resize(4, 2, refcheck=False)
>> b
>> array([[0. , 0.5],
       [1. , 1.5],
       [2. , 2.5],
       [3. , 3.5]])
a
b
都是
numpy.ndarray

我的问题:为什么
resize()
在使用
linspace
创建数组时会出现此错误?当使用3x3调整大小时(因此使用了数组的所有元素),它不会抱怨所有权,但为什么即使我使用
refcheck=False
选项,它也会抱怨4x2


我阅读了关于
linspace
resize
的文档,但找不到原因的答案。

如果检查
np.linspace()
创建的数组的
a.flags
,您将看到OWNDATA为False。这意味着该数组是另一个数组的视图。您可以使用
a.base
查看其他数组

至于
np.linspace()
生成OWNDATA=False的数组的原因,请参阅源代码:

代码的最后一部分是这样做的:

return y.astype(dtype, copy=False)
copy=False
表示结果是一个视图。要获得OWNDATA=True的数组,可以使用
a.copy()
。然后使用refcheck=False调整大小()


另请参见:

@MadPhysicast,我认为这个答案优于标记的重复答案(尽管这样引用很好)。
resize
方法在函数返回新数组时就地操作。函数结果也不拥有数据,以
重塑
结束。尽管名称不同,
resize
方法和函数在执行过程中是截然不同的。@hpaulj:感谢您的输入,我重新打开了这个问题。