不幸的是你内心的列表,以便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