在对具有较大值的列矩阵执行操作之后,在matlab中获得不同的矩阵维度

时间:2014-05-07 17:01:06

标签: matlab for-loop matrix multidimensional-array

将matrix1视为m1,将matrix2视为m2。下面是获取m2的操作.m1是列矩阵.m2是mxn矩阵。在我的例子中,m1是5x1矩阵,m2是5x5矩阵。


获取m2的对角元素的操作:

M2(1,1)= M1(1,1)

M2(2,2)= M1(2,1)

M2(3,3)= M1(3,1)

M2(4,4)= M1(4,1)

M2(5,5)= M1(5,1)

获取m2的其他元素的操作:

公式: r(i,j)= min(p(i,k),q(j,k))其中k = 1

M2(1,2)= MIN(M1(1,1),M1(2,1))

M2(1,3)= MIN(M1(1,1),M1(3,1))

M2(1,4)= MIN(M1(1,1),M1(4,1))

M2(1,5)= MIN(M1(1,1),M1(5,1))

...

...

源代码我试过:

for i = 1:5
    for j = 1:5
        if i == j
           B(i,j) = sum(a(i,1:end));
        else
            minval = 0;
            for k = 1
            minval = minval + min(a(i,k),a(j,k));
            end
            B(i,j)= minval;
        end
    end
end    

此代码适用于以下输入矩阵:

22
 6
10
 6
 8

我为此代码获得的输出矩阵:

22     6    10     6     8
 6     6     6     6     6
10     6    10     6     8
 6     6     6     6     6
 8     6     8     6     8

但是代码不适用于下面的输入矩阵:

 610
 442
 699
 464
 774

输出矩阵iam获取上面的输入矩阵:

5行49列的矩阵。

但是预期的输出矩阵:

 610  442  610  464  610
 442  442  442  442  442 
 610  442  699  464  699 
 464  442  464  464  464
 610  442  699  464  774

解决方案是什么?

1 个答案:

答案 0 :(得分:1)

试试这个 bsxfun 单行,似乎可以满足您的所有需求 -

m2 = bsxfun(@min,m1,permute(m1,[3 1 2]))