#performance #matlab #matrix #vectorization
#Производительность #matlab #матрица #векторизация
Вопрос:
У меня есть матрица X
и я использую ее для вычисления квадратной матрицы в MATLAB: S=X*X'
. Мне нужно найти только недиагональные элементы S
.
Я понимаю, как это сделать для диагонали: sum(X.*X,1)
. Существует ли аналогичный способ поиска недиагональных элементов с помощью векторизации?
Комментарии:
1. Добро пожаловать на сайт! С помощью
S=X*X'
вы получаете недиагональные и диагональные записи. ЕслиX
естьn
строки, избегание вычисления диагональных членов приведет только к экономииn
членов изn^2
всего. Вы могли бы сэкономить дополнительный коэффициент2
из-за симметрии. Стоит ли оно того? Какого размера ваша матрица?
Ответ №1:
Чтобы получить элементы d
-го вне диагонали, это должно сработать:
sum(X(:,1:end-d).*X(:,1 d:end),1)
Это связано с тем, что для R=X*X'
, d
-й вне диагонали имеет эти элементы:
R(k,k d) = sum (X(k,:) .* X(k d,:))