matlab中矩阵的对角平均

时间:2015-05-22 12:44:52

标签: matlab loops matrix

让我们考虑以下矩阵

A=[1 2 3 4;2 4 6 7;3 1 9 8]

A =

     1     2     3     4
     2     4     6     7
     3     1     9     8

可以使用

轻松计算其大小
n,m]=size(A)

n =

     3


m =

     4

让我们考虑一下我们想得到以下向量v

v(1)=A(1,1);
v(2)=(A(2,1)+A(1,2)/2;
v(3)=(A(3,1)+A(2,2)+A(1,3))/3;
v(4)=(A(3,2)+A(2,3)+A(1,4))/3;
v(5)=(A(3,3)+A(2,4))/2;
v(6)=A(3,4);

我们肯定需要大小

的矢量
v=zeros(n+m-1,1);

我计算了前两个似乎微不足道的元素

v(1)=A(1,1);
v(2)=(A(2,1)+A(1,2))/2;

但所有其他我需要使用循环来实现,请注意我需要它使用相同原理的一般矩阵,而不是精确的这种矩阵

我的开始代码是

function [v]=dehankel(A);
%convert matrix A  to  vector using diagonal averaging
[n,m]=size(A);
v=zeros(n+m-1,1);
v(1)=A(1,1);
v(2)=(A(2,1)+A(1,2))/2;
for i=2:3
    for j=2:3

请帮我如何继续

2 个答案:

答案 0 :(得分:4)

A =

     1     2     3     4
     2     4     6     7
     3     1     9     8

[n,m]=size(A);
v=zeros(n+m-1,1);
i = 1;
for d = -(n-1):(m-1)
    v(i) = mean(diag(flipud(A),d));
    i = i+1;
end

答案 1 :(得分:2)

它可以在没有循环的情况下完成(我承认,这不是最易读的代码):

B = zeros(size(A,1)+size(A,2)-1, size(A,2));
B(bsxfun(@plus, (1:size(A,1)).', (0:size(A,2)-1)*(size(A,1)+size(A,1)+1))) = A;
v = sum(B.')./[1:size(A,1) size(A,1):-1:1];