我正在使用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)
这给了我以下错误:
ValueError: cannot resize this array: it does not own its data
当我创建相同的值数组并调整其大小时,数组的大小成功调整:
>> 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
我的问题:当使用linspace
创建数组时resize()
为什么会出现此错误?当使用3x3调整大小时(因此使用了数组的所有元素),它不会抱怨所有权,但为什么即使使用refcheck=False
选项,它也会抱怨4x2
我阅读了关于linspace
和resize
的文档,但找不到关于原因的答案
如果检查由
np.linspace()
创建的数组的a.flags
,您将看到OWNDATA为False。这意味着该数组是另一个数组的视图。您可以使用a.base
查看另一个数组至于
np.linspace()
生成OWNDATA=False的数组的原因,请参阅源代码:https://github.com/numpy/numpy/blob/v1.19.0/numpy/core/function_base.py#L23-L165代码的最后一部分是这样做的:
copy=False
表示结果是一个视图。要获得OWNDATA=True的数组,可以使用a.copy()
。然后resize()
使用refcheck=False将起作用另见:Numpy, the array doesn't have its own data?
相关问题 更多 >
编程相关推荐