#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])