#python #numpy #matrix
#python #numpy #матрица
Вопрос:
Я пытаюсь объявить матрицу numpy размером 16×16:
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, а не массив списков…Конечно, я делаю что-то глупое, но на всю жизнь не могу понять…
Ответ №1:
Что ж, давайте разберемся
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
x 16
Комментарии:
1. Дох! Была запятая там, где она должна была быть «.». Трудно определить визуально. Блестящий улов с циклом. спасибо, G