Способ вычисления недиагональных членов квадратной матрицы

#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,:))