Machine learning 如何基于另一个向量将一个矩阵拆分为多个矩阵

Machine learning 如何基于另一个向量将一个矩阵拆分为多个矩阵,machine-learning,octave,linear-algebra,Machine Learning,Octave,Linear Algebra,如果 A=[1 2 3;4 5 6;7 8 9] B=[12] 我发现 A(B==1,:)返回[123]和 A(B==2,:)返回[456;789] 因为 B==1返回[1 0]和 B==2返回[0 1] 鉴于上述A和B的示例,是否有更简单的方法在一步即不使用for循环的情况下获得最终矩阵[1 2 3]和[4 5 6;7 8 9] 目标是生成聚类的质心,在K-均值聚类问题中,每个示例(A中的行)都已分配给这些质心。我正在考虑将结果矩阵传递给mean()函数以生成质心。您可以得到一个单元格

如果

A=[1 2 3;4 5 6;7 8 9]

B=[12]

我发现

  • A(B==1,:)返回[123]和
  • A(B==2,:)返回[456;789]
因为

  • B==1返回[1 0]和
  • B==2返回[0 1]
鉴于上述A和B的示例,是否有更简单的方法在一步即不使用for循环的情况下获得最终矩阵[1 2 3]和[4 5 6;7 8 9]


目标是生成聚类的质心,在K-均值聚类问题中,每个示例(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

}

你可以得到一个单元格数组

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

}

你说得到是什么意思?我可以看出你想推广这个,但不清楚你想推广到什么。是否要传入一个索引数组并返回一个数组?是的。目标是生成聚类的质心,每个示例(A中的行)已在K均值聚类问题中分配给这些质心。我正在考虑将得到的矩阵传递给mean()函数来生成质心。你说的get是什么意思?我可以看出你想推广这个,但不清楚你想推广到什么。是否要传入一个索引数组并返回一个数组?是的。目标是生成聚类的质心,每个示例(A中的行)已在K均值聚类问题中分配给这些质心。我正在考虑将结果矩阵传递给mean()函数以生成质心。谢谢。有效:-)。我不得不稍微改变一下,以获得方法。arrayfun(@(lev)表示(A(B==lev,:),1),唯一(B),‘UniformOutput’,false)谢谢。有效:-)。我不得不稍微改变一下,以获得方法。arrayfun(@(lev)平均值(A(B==lev,:),1),唯一(B),'UniformOutput',false)