我想生成一个矩阵,其中i,j元素等于i * j,其中i!= j。
e.g。
0 2 3
2 0 6
3 6 0
到目前为止,我已经发现我可以使用此索引矩阵访问非对角线元素
idx = 1 - eye(3)
但我还没弄清楚如何将矩阵单元的索引合并到计算中。
答案 0 :(得分:9)
我正在考虑一般情况(矩阵不一定是正方形)。让
m = 4; %// number of rows
n = 3; %// number of columns
有很多方法:
使用ndgrid
:
[ii jj] = ndgrid(1:m,1:n);
result = (ii.*jj).*(ii~=jj);
使用bsxfun
:
result = bsxfun(@times, (1:m).',1:n) .* bsxfun(@ne, (1:m).',1:n);
使用repmat
和cumsum
:
result = cumsum(repmat(1:n,m,1));
result(1:m+1:m^2) = 0;
使用矩阵乘法(由@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