Python 调整使用linspace创建的数组的大小:数组不拥有其数据
我正在使用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.
>> 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:感谢您的输入,我重新打开了这个问题。