我正在尝试创建一个循环读取矩阵(A)并将非零值存储到新矩阵(w)中。我不确定我的代码有什么问题。
function [d,w] = matrix_check(A)
[nrow ncol] = size(A);
total = 0;
for i = 1:nrow
for j = 1:ncol
if A(i,j) ~= 0
total = total + 1;
end
end
end
d = total;
w = [];
for i = 1:nrow
for j = 1:ncol
if A(i,j) ~= 0
w = [A(i,j);w];
end
end
end
第二个循环不起作用(至少它没有打印出w的结果)。
答案 0 :(得分:2)
w = flipud(nonzeros(A)); %// flipud to achieve the same order as in your code
d = nnz(A);
答案 1 :(得分:1)
第二个循环正在运行。我猜你在做什么:
>> matrix_check(A)
而不是:
>> [d, w] = matrix_check(A)
除非另有说明,否则MATLAB将仅返回第一个输出。
顺便说一句,你可以利用MATLAB的logical indexing来完成你的任务,并利用(通常更快)数组操作而不是循环。
d = sum(sum(A ~= 0));
w = A(A ~= 0);