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

bgo*_*man 6 arrays matlab matrix

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

例如

0 2 3
2 0 6
3 6 0
Run Code Online (Sandbox Code Playgroud)

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

idx = 1 - eye(3)
Run Code Online (Sandbox Code Playgroud)

但我还没想出如何将矩阵单元的索引合并到计算中.

Lui*_*ndo 9

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

m = 4; %// number of rows
n = 3; %// number of columns
Run Code Online (Sandbox Code Playgroud)

有很多方法:

  1. 使用ndgrid:

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

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

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

    result = (1:m).'*(1:n).*~eye(m,n);
    
    Run Code Online (Sandbox Code Playgroud)


小智 7

怎么样

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

  • +1在我眼中最优雅的解决方案.我甚至会使用:`[1:N]'*[1:N].*~diag([1:N])` (4认同)