假设我在MATLAB中有一个维度为Nx(N-1)的矩阵A,例如:
你能否提供一个有效的向量化方法?
N=5;
A=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16; 17 18 19 20 ];
我想将A
转换成一个NxN
矩阵B
,只需添加零对角线即可,即:
B=[ 0 1 2 3 4;
5 0 6 7 8;
9 10 0 11 12;
13 14 15 0 16;
17 18 19 20 0];
这段代码实现了我想要的功能:
B_temp = zeros(N,N);
B_temp(1,:) = [0 A(1,:)];
B_temp(N,:) = [A(N,:) 0];
for j=2:N-1
B_temp(j,:)= [A(j,1:j-1) 0 A(j,j:end)];
end
B = B_temp;
你能否提供一个有效的向量化方法?
B = 1-eye(N);
来避免转换为逻辑矩阵,然后执行B(logical(B)) = A.'; B = B.';
来避免使用find
。不确定哪种方法更高效。 - Wolfiefind
,并处理逻辑索引会更有效率。谢谢。 - Sardar Usamatriu
/tril
内部发生了什么,但它们似乎是编译函数,因此后端会发生一些快速的事情,然后进行简单的加法。 - Wolfie