Matlab 对于与稀疏矩阵构造函数具有相同签名的完整数组,是否存在数组创建函数?
我想在矩阵中积累索引元素,比如R中的table和tapply函数 我发现稀疏(I,j,s,m,n)非常适合我的需要 正如文件所说:“s中任何具有重复值i和j的元素都被加在一起。” 但我必须使用full()将获得的稀疏矩阵转换为完整矩阵: 这是一种有效的方法吗Matlab 对于与稀疏矩阵构造函数具有相同签名的完整数组,是否存在数组创建函数?,matlab,Matlab,我想在矩阵中积累索引元素,比如R中的table和tapply函数 我发现稀疏(I,j,s,m,n)非常适合我的需要 正如文件所说:“s中任何具有重复值i和j的元素都被加在一起。” 但我必须使用full()将获得的稀疏矩阵转换为完整矩阵: 这是一种有效的方法吗 顺便问一下,无论是否添加重复的i,j对,是否有如下内容 a = setelements(a, i,j,s); 及 其中i&j在sparse()函数中具有意义 如果a是多维数组呢?稀疏()只处理矩阵。 我必须用外部循环逐页设置条目吗?看
顺便问一下,无论是否添加重复的i,j对,是否有如下内容
a = setelements(a, i,j,s);
及
其中i&j在sparse()函数中具有意义
如果a是多维数组呢?稀疏()只处理矩阵。 我必须用外部循环逐页设置条目吗?看一看。比如说,
ii = [1 2 2 3 3];
jj = [3 2 2 2 2];
s = [10 20 30 40 50];
a = accumarray([ii(:) jj(:)],s(:));
给予
请注意,第一个参数([ii(:)jj(:)]
)的每一行都在输出数组中定义了一个N维索引(本例中N为2)
accumarray
非常灵活。它适用于N维数组,允许您指定结果的大小(它可能大于从提供的索引推断出的大小),甚至可以对同一索引定义的每组值应用任意函数(不同于sum)
作为更一般的示例,使用上述数据
a = accumarray([ii(:) jj(:)],s(:),[4 4],@max)
给予
感谢@bobGilmore帮助编辑标题!完全匹配!你太聪明了!
ii = [1 2 2 3 3];
jj = [3 2 2 2 2];
s = [10 20 30 40 50];
a = accumarray([ii(:) jj(:)],s(:));
a =
0 0 10
0 50 0
0 90 0
a = accumarray([ii(:) jj(:)],s(:),[4 4],@max)
a =
0 0 10 0
0 30 0 0
0 50 0 0
0 0 0 0