我试图声明一个16x16 numpy矩阵:
P = np.array([[0.1, 0.3, 0.3, 0.3, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.5, 0.5, 0.0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.0, 0.8, 0.2, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.4, 0.0, 0.0, 0.6, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.1, 0.3, 0.3, 0.3, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.5, 0.5, 0.0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.0, 0.8, 0.2, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.4, 0.0, 0.0, 0.6, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.1, 0.3, 0.3, 0.3, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.5, 0.5, 0.0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.0, 0.8, 0.2, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.4, 0.0, 0.0, 0.6, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0,1, 0.3, 0.3, 0.3, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.5, 0.5, 0.0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.0, 0.8, 0.2, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.4, 0.0, 0.0, 0.6, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
输出:
list([0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.0, 0.0, 0.8, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.4, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.1, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.0, 0.0, 0.8, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.4, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.1, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.0, 0.0, 0.8, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.4, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0, 1, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.0, 0.0, 0.8, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
list([0.4, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])],
dtype=object)
为什么?我想要一个纯numpy矩阵,而不是一个列表数组。。。当然这是我在做的愚蠢的事情,但我一辈子都搞不清楚。。。
好吧,让我们研究
import numpy as np
P = np.array([[0.1, 0.3, 0.3, 0.3, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.5, 0.5, 0.0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.0, 0.8, 0.2, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.4, 0.0, 0.0, 0.6, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.1, 0.3, 0.3, 0.3, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.5, 0.5, 0.0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.0, 0.8, 0.2, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.4, 0.0, 0.0, 0.6, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.1, 0.3, 0.3, 0.3, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.5, 0.5, 0.0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.0, 0.8, 0.2, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.4, 0.0, 0.0, 0.6, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0,1, 0.3, 0.3, 0.3, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.5, 0.5, 0.0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.0, 0.0, 0.8, 0.2, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0.4, 0.0, 0.0, 0.6, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
for i in P:
print(i.__len__())
...
16
17 #oh?
16
16
16
还要注意,它给了我们一个警告:
VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
所以存在长度问题!
让我们仔细看看
[0,1, 0.3, 0.3, ...]
[0.0, 0.5, 0.5, ...]
长度不同,这就是为什么你会得到错误的
可能使用[0.1, 0.3, 0.3, ...]
进行修复,使其成为16
x16