Операции с двумя списками в виде массивов - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно выполнить операцию над двумя списками, 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) и разным количеством строк. Как я могу перебрать столбцы разной длины?

1 Ответ

0 голосов
/ 19 июля 2019

Ваша проблема в том, что вы создаете еще один список, чем необходимо, добавляя дополнительные скобки в следующий фрагмент кода:

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[i].append(np.array(X[i][j]) - np.array(Y[i][j]))

это должно решить вашу проблему.

Результат по-прежнему будет иметь три уровня глубины, однако элементы M, которые вы храните, представляют собой списки списков с плавающей точкой M[][][].

Для вашего второговопрос, кажется, вы делаете все правильно.Было бы лучше, если бы ваши данные имели ту же форму, но это все, что вы можете сделать, если это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...