Python выполняет итерацию по матрице

#python #for-loop #multidimensional-array #iterator #enumerate

#питон #для-петли #многомерный массив #итератор #перечислять

Вопрос:

У меня есть функция, которая вычисляет некоторые результаты для всех комбинаций значений во входном векторе:

 MyFunction(inp_vec):  ...  return some_array  

inp_vec может быть список любой длины от 1 до 6. Таким образом, выходной массив some_array может иметь любой размер между (1,1) и (6,6) соответственно.

Для некоторых дальнейших вычислений я хотел бы собрать массив размером (6,6), который сначала состоял бы из всех нулей A = np.empty([6,6]) , а соответствующие записи , вычисленные функцией, были бы заменены некоторыми значениями.

Проблема в том, что выходной массив some_array может иметь размер, отличный от (6,6).

Я бы хотел использовать что-то вроде numerate() , но в рамках такого рода цикла for:

 for i,j in list(itertools.product(inp_vec, inp_vec)):  A[n,m] = some_array[i, j]  

Как мне получить итераторы n, m?

Ответ №1:

Я думаю, это то, чего ты хочешь:

 import numpy as np import itertools inp_vec = np.array([1,2,3]) A = np.empty([6,6])  M = np.array(list(itertools.product(inp_vec, inp_vec))).reshape(len(inp_vec),-1,2) print(M)  

выход:

 [[[1 1]  [1 2]  [1 3]]   [[2 1]  [2 2]  [2 3]]   [[3 1]  [3 2]  [3 3]]]  

Комментарии:

1. Большое спасибо! Я не понимаю, как это помогает мне записывать выходные данные моей функции в правильные места массива 6×6?

Ответ №2:

Окончательно решается путем введения итераторов n и m внутри цикла for, сопоставления записей в выходном массиве и целевом массиве:

 for i,j in itertools.product(some_array_indices, some_array_indices):  m = inp_vec_indices[i]  n = inp_vec_indices[j]  A[m][n] = float(some_array[i][j])