如果
A = [1 2 3; 4 5 6; 7 8 9]
B = [1 2 2]
我发现
- A(B == 1, 🙂 返回 [1 2 3],而
- A(B == 2, 🙂 返回 [4 5 6; 7 8 9]
这是因为
- B == 1 返回 [1 0 0],而
- B == 2 返回 [0 1 1]
基于上述A和B的例子,有没有更简单的方法可以在一步中得到最终的矩阵 [1 2 3] 和 [4 5 6; 7 8 9],即不使用for循环。
目标是生成K-means聚类问题中每个示例(A中的行)被分配到的簇的质心。我考虑将结果矩阵传递给mean()函数来生成质心。
回答:
你可以得到一个单元数组
A = [1 2 3; 4 5 6; 7 8 9];B = [1 2 2]; arrayfun(@(lev) A(B==lev, :), unique(B), 'UniformOutput', false)
返回
ans = { [1,1] = 1 2 3 [1,2] = 4 5 6 7 8 9}