为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕神8447489 2023-09-26 14:05:23
我正在使用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我的问题:为什么resize()使用创建数组时会出现此错误linspace?当使用 3x3 调整大小(因此使用数组的所有元素)时,它不会抱怨所有权,但为什么即使我使用refcheck=False选项它也会抱怨 4x2 ?linspace我阅读了有关和 的文档resize,但找不到有关原因的答案。
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

如果您检查a.flags创建的数组,np.linspace()您将看到 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 就可以了。


查看完整回答
反对 回复 2023-09-26
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信