我想对给定矩阵的每一行应用唯一的函数,而不涉及任何for循环 . 假设我有以下4乘5矩阵
full(A) = [0 1 0 0 1
2 1 0 3 0
1 2 0 0 2
0 3 1 0 0]
其中 A
是对应的稀疏矩阵 . 作为使用for循环的示例,我可以这样做
uniq = cell(4,1);
for i = 1:4
uniq{i} = unique(A(i,:));
end
我将获得由...给出的单元结构uniq
uniq{1} = {1}
uniq{2} = {[1 2 3]}
uniq{3} = {[1 2]}
uniq{4} = {[1 3]}
有没有更快的方法来矢量化这个并避免循环?我需要将其应用于M-by-5矩阵,M大 . 请注意,我对每行的唯一元素数量不感兴趣(我知道这个问题有很多答案) .
2 回答
您可以将accumarray与自定义函数一起使用:
这给出了:
您可以使用
num2cell(A,2)
将每一行转换为单元格,然后使用cellfun
将cellfun
转换为每行的唯一值的单元格数组: