Мне нужно выполнить операцию над двумя списками, X
и Y
, для чего я должен преобразовать их в массивы, которые я могу сделать с помощью:
M = [[] for i in range(len(mags))]
for i in range(len(a)):
for j in range(len(b)):
M[i].append([np.array(X[i][j]) - np.array(Y[i][j])])
Теперь я ожидаю получить массив для M
, который будет a
умножен на b
матрицу. Однако меня больше всего смущает вложение данных, создаваемое операцией. Элементы M
теперь представляют собой list-list-array-float64 (M[][][][]
). То, что я ожидал бы, это иметь список списков , т.е. M[][]
, к которым я могу получить доступ (и построить) в простой функции цикла:
x = M ; Y = N
for i in range(len(M)):
plt.scatter(x[i], y[i])
где N
- список списков.
Как я могу получить M
просто как список списков?
(Простое вычитание, конечно, приводит к известному сообщению unsupported operand type(s) for -: 'list' and 'list'
)
(где-то читал аналогию этой иерархии данных в качестве почтового адреса:
M[2][13][7][85]
может означать улицу 2
, квартал 13
, этаж 7
, комнату 85
. Я бы ожидал только этаж и комнату.).
Как мне производить X
и Y
:
X = [[] for i in range(len(mags))]
for i in range(len(mags)):
for j in range(len(G[i])):
X[i].append([G[i][j] - J[i][j]])
, где G
и J
- матрицы с одинаковым количеством столбцов (mags
) и разным количеством строк. Как я могу перебрать столбцы разной длины?