不幸的是你內心的列表,以便numpy的創建一個對象數組是不一樣的尺寸:
>>> numpy_array
array([[-1, -1, -1, -1, -1], [-1, 2, 2, 2, -1], [-1, 2, 8, 2, -1],
[-1, 2, 2, 2, -1], [-1, -1, -1, -1, -1, -1]], dtype=object)
你應該儘量避免object
的陣列,因爲他們可能不表現得像課程的預期,他們是慢。如果你需要不同大小的內部列表,您應該掩蓋元素:
>>> import numpy as np
>>> numpy_array = np.array([[-1,-1,-1,-1,-1, np.nan],
... [-1, 2, 2, 2,-1, np.nan],
... [-1, 2, 8, 2,-1, np.nan],
... [-1, 2, 2, 2,-1, np.nan],
... [-1,-1,-1,-1,-1,-1]])
>>> numpy_array = np.ma.array(numpy_array, mask=np.isnan(numpy_array))
>>> numpy_array /= 8.0
>>> numpy_array
masked_array(data =
[[-0.125 -0.125 -0.125 -0.125 -0.125 --]
[-0.125 0.25 0.25 0.25 -0.125 --]
[-0.125 0.25 1.0 0.25 -0.125 --]
[-0.125 0.25 0.25 0.25 -0.125 --]
[-0.125 -0.125 -0.125 -0.125 -0.125 -0.125]],
mask =
[[False False False False False True]
[False False False False False True]
[False False False False False True]
[False False False False False True]
[False False False False False False]],
fill_value = 1e+20)
你也需要小心就地-操作,因爲它們不改變dtype
,所以當你有一個整數數組和就地與浮動你仍然有一個整數數組(與截斷結果)-divide,或得到一個異常:
>>> arr = np.array([1, 2, 3])
>>> arr /= 8.0
TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'l') according to the casting rule ''same_kind''
創建float
陣列,而不是(或轉換爲float
或只是做一個正常的分裂arr = arr/8.0
):
>>> arr = np.array([1, 2, 3], dtype=float)
>>> arr /= 8.0
>>> arr
array([ 0.125, 0.25 , 0.375])
這看起來不像常規數組。它的每個元素都是一個列表而不是一個數組。 – Divakar
列表中的最後一項是否意味着有6個項目,其他項目只有5個? – njoosse
@njoose你是對的,這是一個錯誤! – Max