matlab - 从矩阵的每一行中提取唯一元素 (Matlab)

标签 matlab matrix vectorization

我想对给定矩阵的每一行应用唯一的函数,而不涉及任何 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]}

有没有更快的方法来矢量化它并避免 for 循环? 我需要将其应用于 M 大的 M×5 矩阵。 请注意,我对每行的唯一元素的数量不感兴趣(我知道有针对此类问题的解决方案)。

最佳答案

您可以使用 accumarray使用自定义函数:

A = sparse([0 1 0 0 1; 2 1 0 3 0; 1 2 0 0 2; 0 3 1 0 0]); % data
[ii, ~, vv] = find(A);
uniq = accumarray(ii(:), vv(:), [], @(x){unique(x.')});

这给出:

>> celldisp(uniq)
uniq{1} =
     1
uniq{2} =
     1     2     3
uniq{3} =
     1     2
uniq{4} =
     1     3

关于matlab - 从矩阵的每一行中提取唯一元素 (Matlab),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43919435/

相关文章:

matlab - 为什么准确率是 0%? MATLAB LIBSVM

arrays - 在Matlab中直接获取数组/单元格的元素

python - 用于在两个数组上搜索 ckdtree 的向量化循环

algorithm - 以行方式 reshape MATLAB 向量

matlab - 条形图 x 轴标题不适用于许多条形图

performance - 向量化三重循环 - MATLAB

c++ - C++ Eigen 。需要建议

java - 列出所有游戏

c - 替代 immintrin.h

r - 提高 for 循环的速度/矢量化,包括样本函数 R