#python
Вопрос:
Я использую Python, и у меня есть матрица XxY, где X = Y, и я хочу выполнить итерацию по верхней треугольной матрице определенным образом, чтобы она начиналась с и продолжалась, и и так далее, и так далее до последней строки и столбца. Поэтому я попытался создать двойной цикл, который перебирает столбцы один за другим, и внутри этого цикла я создал еще один цикл, который перебирает строки, всегда добавляя одну строку. Однако я застрял в определении того, как добавить следующую строку для каждого столбца во втором цикле. Вот что я получил до сих пор (для простоты я просто создал массив нулей):
import pandas as pd
import numpy as np
# number of columns
X = 10
# number or rows
Y = X
U = np.zeros((Y,X))
for j in range(X):
for z in range():
Моя первоначальная идея состояла в том, чтобы создать массив Yx1 с y = np.asarray(list(range(0,Y)))
помощью и использовать его для второго цикла, но я не понимаю, как это реализовать. Может кто-нибудь, пожалуйста, помочь мне? Может быть, есть более простой способ определить такую итерацию?
Комментарии:
1.
for z in range(j, X 1): ...
(включены диагональные элементы)
Ответ №1:
С помощью Numpy вы можете получить индексы для верхней треугольной матрицы с triu_indices_from
помощью и индексировать в массив с помощью этого:
import numpy as np
a = np.arange(16).reshape([4, 4])
print(a)
#[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
indices = np.triu_indices_from(a)
upper = a[indices]
print(upper)
# [ 0 1 2 3 5 6 7 10 11 15]
Комментарии:
1. Спасибо за информацию! Разве это не перезаписало бы значения в матрице? Я просто взял нули здесь для простоты, но на самом деле у меня есть матрица с определенными значениями.
2. Не уверен, что я понимаю @Phil, ничего в приведенном выше коде не меняется
a
. Индексы — это новый массив индексов, который вы используете для индексацииa
.upper
это новый массив, основанный на этой индексации.a
остается неизменным повсюду.3. Извините, я неправильно понял ваш код, так как думал, что a — это моя исходная матрица U, а не новая!
4. Если я хочу сохранить размер переменной матрицы, как бы я написал это так, чтобы оно сохраняло текущие целые числа? Я пробовал с
np.array
помощью andnp.arange
, но не смог его найти.