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

2024-09-28 21:55:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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]])

ab都是numpy.ndarray

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

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


Tags: false错误np方式it数组thisarray
1条回答
网友
1楼 · 发布于 2024-09-28 21:55:11

如果检查由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

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

return y.astype(dtype, copy=False)

copy=False表示结果是一个视图。要获得OWNDATA=True的数组,可以使用a.copy()。然后resize()使用refcheck=False将起作用

另见:Numpy, the array doesn't have its own data?

相关问题 更多 >