matlab - 如何遍历 matlab 中矩阵的列并将它们分别添加到 matlab 中求和矩阵的特定列?

标签 matlab matrix vector sum vectorization

假设有一个矩阵

A =

 1     3     2    4
 4     2     5    8
 6     1     4    9

例如,我有一个 Vector 包含该矩阵每一列的“类”

v = [1 , 1 , 2 , 3]

如何将矩阵的列作为列向量求和到一个新矩阵中,每个列向量都对应于它们所在类别的列?在此示例中,A 的第 1 列和第 2 列将添加到新矩阵的第一列,第 2 列到第 3 列到第 2 列,第 4 列到第 3 列。

喜欢

SUM =

4    2    4
6    5    8
7    4    9

这可能没有循环吗?

最佳答案

结合 accumarraybsxfun 功能的完美方案之一 -

%// Since we are to accumulate columns, first step would be to transpose A
At = A.'  %//'

%// Create a vector of linear IDs for use with ACCUMARRAY later on
idx = bsxfun(@plus,v(:),[0:size(A,1)-1]*max(v))

%// Use ACCUMARRAY to accumulate rows from At, i.e. columns from A based on the IDs
out = reshape(accumarray(idx(:),At(:)),[],size(A,1)).'

sample 运行-

A =
     1     3     2     4     6     0
     4     2     5     8     9     2
     6     1     4     9     8     9
v =
     1     1     2     3     3     2
out =
     4     2    10
     6     7    17
     7    13    17

关于matlab - 如何遍历 matlab 中矩阵的列并将它们分别添加到 matlab 中求和矩阵的特定列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545361/

相关文章:

matlab - 为什么在测试分布时 p 值为 0

无法在 malloc 矩阵中输入值

c++ - 从类型 ‘Matrix&’ 的右值初始化类型 ‘Matrix’ 的非常量引用无效

math - 数学和编程中的向量之间的区别

r - 如何在向量的元素之间随机分配数字?在 R

excel - MATLAB:从 100,000 行和 300 列的 Excel 工作表中将数据导入 Matlab

python - 在 Numpy 中将索引转换为向量

c - 当未连接的顶点使用权重矩阵的值为 -1 时,C 中的 Dijkstra 算法

c++ - 定义 vector 的 unordered_map 的最佳方法

matlab - Matlab中变量的符号声明