Matlab 对于与稀疏矩阵构造函数具有相同签名的完整数组,是否存在数组创建函数?

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是多维数组呢?稀疏()只处理矩阵。 我必须用外部循环逐页设置条目吗?看

我想在矩阵中积累索引元素,比如R中的table和tapply函数

我发现稀疏(I,j,s,m,n)非常适合我的需要

正如文件所说:“s中任何具有重复值i和j的元素都被加在一起。”

但我必须使用full()将获得的稀疏矩阵转换为完整矩阵:

这是一种有效的方法吗


顺便问一下,无论是否添加重复的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