我有一个从R的Matrix包创建的稀疏矩阵。我想迭代矩阵中的每个条目并执行一个操作,将结果保存在与原始矩阵具有相同索引的另一个稀疏矩阵中。R:映射稀疏矩阵中所有条目的方法
例如,假设我有稀疏矩阵A:
1 . 1
2 . .
. . 4
ColSums会是什么样子:
3 . 5
RowSums会是什么样子:
2
2
4
我想迭代A并执行此操作
(1,1) > 3*2
(2,1) > 2*3
(1,3) > 2*5
(3,3) > 4*5
创建B:
6 . 10
6 . .
. . 20
我怎么会去一个量化的方式这样做呢?
我认为函数foo看起来像:
B=fooMap(A,fun)
和乐趣会是什么样子:
fun(row,col) = RowSums(row) * ColSums(col)
什么fooMap?
编辑:
我用flodel的解决方案。它使用汇总将稀疏矩阵转换为i,j,x数据帧,然后与&朋友一起使用来对该帧执行操作,然后将结果转换回稀疏矩阵。使用这种技术,with/within运算符是fooMap;稀疏矩阵必须首先转换为i,j,x数据帧,以便可以使用/ within。
这是解决这个特殊问题的单线程。
B = with(summary(A), sparseMatrix(i=i, j=j, x = rowSums(A)[i] * colSums(A)[j]))
+1 - 这是一个好主意。 –
内看起来非常强大。那么在内部,你已经读取了对象中所有列的访问权限,它们的框架名称被引用了吗?这是用来构建原始对象的稍微修改版本,但作为一个新的对象,不共享任何相同的内存,是吗? –
是的,这是正确的:-) – flodel