在Matlab中将矩阵中的元素i,j设置为i * j

时间:2014-03-06 22:06:41

标签: arrays matlab matrix

我想生成一个矩阵,其中i,j元素等于i * j,其中i!= j。

e.g。

0 2 3
2 0 6
3 6 0

到目前为止,我已经发现我可以使用此索引矩阵访问非对角线元素

idx = 1 - eye(3)

但我还没弄清楚如何将矩阵单元的索引合并到计算中。

4 个答案:

答案 0 :(得分:9)

我正在考虑一般情况(矩阵不一定是正方形)。让

m = 4; %// number of rows
n = 3; %// number of columns

有很多方法:

  1. 使用ndgrid

    [ii jj] = ndgrid(1:m,1:n);
    result = (ii.*jj).*(ii~=jj);
    
  2. 使用bsxfun

    result = bsxfun(@times, (1:m).',1:n) .* bsxfun(@ne, (1:m).',1:n);
    
  3. 使用repmatcumsum

    result = cumsum(repmat(1:n,m,1));
    result(1:m+1:m^2) = 0;
    
  4. 使用矩阵乘法(由@GastónBengolea添加):

    result = (1:m).'*(1:n).*~eye(m,n);
    

答案 1 :(得分:7)

怎么样

N=3;  %size of matrix
A=[1:N]'*[1:N]-diag([1:N].^2)

答案 2 :(得分:4)

另一个伎俩就是滥用kron功能:

>> m = 4;
>> n = 3;
>> a = kron((1:m)', 1:n);
>> a(eye(m, n, 'logical')) = 0

a =

    0    2    3
    2    0    6
    3    6    0
    4    8   12

答案 3 :(得分:3)

for i=1:3
    for j=1:3
        if i==j
           A(i,j)=0;
        else
           A(i,j)=i*j;
        end
    end
end