将非零整数从一个矩阵存储到另一个矩阵

时间:2015-05-26 19:01:40

标签: matlab function loops for-loop

我正在尝试创建一个循环读取矩阵(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的结果)。

2 个答案:

答案 0 :(得分:2)

您可以使用nonzerosnnz

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);