#python #for-loop #iteration
#python #цикл for #итерация
Вопрос:
Я делаю программу, которую написал для проекта uni, более расширенной, и раньше я работал с матрицей 3×3, но теперь это матрица 15 на 15, и я хочу создать цикл for для заполнения значений, а не то, что у меня есть в настоящее время. Я сделал этот пример кода немного меньше, но это то, что я хочу поместить в цикл for:
distance_matrix=
[array1[0]-array2[0], array1[1]-array2[0], array1[2]-array2[0], array1[3]-array2[0],array1[4]-array2[0]],
[array1[0]-array2[1], array1[1]-array2[1], array1[2]-array2[1], array1[3]-array2[1],array1[4]-array2[1]],
[array1[0]-array2[2], array1[1]-array2[2], array1[2]-array2[2], array1[3]-array2[2],array1[4]-array2[2]],
[array1[0]-array2[3], array1[1]-array2[3], array1[2]-array2[3], array1[3]-array2[3],array1[4]-array2[3]],
[array1[0]-array2[4], array1[1]-array2[4], array1[2]-array2[4], array1[3]-array2[4],array1[4]-array2[4]]
Итак, это матрица 5×5. Как вы можете видеть, значения для каждой записи представляют собой разницу между значениями в 2 массивах. Моей первой мыслью об этом цикле был двухслойный вложенный цикл for , но это сгенерировало только матрицу 5×1 со значениями по диагонали, значениями (i, i). это выглядело так:
distance_matrix=[[0 for x in range(0,5)] for y in range(0,5)]
for i range(0,5):
for j in range(0,5):
distance_matrix[i][j]=array1[i]-array2[j]
затем я попробовал использовать оператор if, просто список, который я мог бы затем изменить, и установить значение, которое остается постоянным для строк во внешнем цикле, но это снова сгенерировало список длиной 5 (и я не могу понять, почему):
distance_matrix_list=[]
for col_val in range(0,5):
first_value=array1[col_val]
for row_val in range(0,5)):
if row_val<5):
distance_matrix_list.append([first_value-array2[row_val]])
distance_matrix=np.array(distance_matrix_list)
distance_matrix.reshape((5,5))
это должно быть действительно очевидно, и я очень разочарован, что я пропускаю это. Пожалуйста, помогите!
Ответ №1:
Ваш первый фрагмент кода, за исключением некоторых опечаток, должен работать просто отлично. Однако вам необходимо переключать i и j при назначении индексов. У меня это работает нормально:
distance_matrix=[[0 for x in range(5)] for y in range(5)]
for i in range(5):
for j in range(5):
distance_matrix[i][j] = array1[j] - array2[i]
Комментарии:
1. Большое спасибо! несколько опечаток при индексации и ошибок с отступами означали, что я этого не получал. знание того, что это было на самом деле правильно, позволило мне правильно видеть, что происходит. Спасибо!
2. Если это помогло, я был бы признателен, если бы вы отметили ответ как правильный.