我正在使用linspace創(chuàng)建一個數(shù)組:>> a = np.linspace(0, 4, 9)>> a>> array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ])我成功地調(diào)整了它的大小,如下所示:>> a.resize(3, 3)>> a>> array([[0. , 0.5, 1. ], [1.5, 2. , 2.5], [3. , 3.5, 4. ]])但是,當我嘗試按如下方式調(diào)整其大小時:a.resize(4, 2, refcheck=False)這給了我以下錯誤: ValueError: cannot resize this array: it does not own its data當我創(chuàng)建相同的值數(shù)組并調(diào)整其大小時,數(shù)組大小已成功調(diào)整:>> 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()使用創(chuàng)建數(shù)組時會出現(xiàn)此錯誤linspace?當使用 3x3 調(diào)整大?。ㄒ虼耸褂脭?shù)組的所有元素)時,它不會抱怨所有權,但為什么即使我使用refcheck=False選項它也會抱怨 4x2 ?linspace我閱讀了有關和 的文檔resize,但找不到有關原因的答案。
1 回答

慕標琳琳
TA貢獻1830條經(jīng)驗 獲得超9個贊
如果您檢查a.flags
創(chuàng)建的數(shù)組,np.linspace()
您將看到 OWNDATA 為 False。這意味著該數(shù)組是另一個數(shù)組的視圖。您可以用來a.base
查看其他數(shù)組。
至于為什么np.linspace()
產(chǎn)生OWNDATA=False的數(shù)組,請參見源代碼:https://github.com/numpy/numpy/blob/v1.19.0/numpy/core/function_base.py#L23-L165
代碼的最后一部分執(zhí)行此操作:
return y.astype(dtype, copy=False)
這copy=False
意味著結果是一個視圖。要獲取 OWNDATA=True 的數(shù)組,可以使用a.copy()
. 然后resize()
使用 refcheck=False 就可以了。
添加回答
舉報
0/150
提交
取消