回收更高维数组

时间:2017-03-19 22:48:36

标签: r

我很惊讶地发现R的回收不适用于更高的尺寸:

> str(Z)
 num [1:5, 1:100, 1:10] 1.02 0.989 2.555 1.167 -0.835 ...
> str(w)
 num [1:5, 1:100] 1.43 7.84 6.13 2.91 2.8 ...
> Z + w
Error in Z + w : non-conformable arrays

而我预计2d矩阵w将沿Z的第3维回收。我使用矩阵w获得了相同的错误,其维度类似于Z的最后2个(与numpy的广播规则一样)。我想当回收R会简单地按照尺寸(C样式)的顺序压扁每个数组并添加它们,然后重新整形它们,这将在多个维度中起作用。是否有正确的方法来回收像我正在尝试的矩阵?我想我可以通过操纵昏暗的属性来实现扁平化和重塑自己,但显然我不愿意自己做这项工作。

语言定义有这一行:“也就是说,如果你将c(1,2,3)添加到六元素向量中,那么你真的会添加c(1,2,3,1,2, 3)。”任何看过引擎盖的人都能告诉我R是否真的从更短的时间创建一个新的更长的向量,以符合另一个操作数,然后应用运算符?我一直认为回收利用更节省空间。如果没有,那么我也可以通过从矩阵创建一个三维数组来实现更高维度的回收。我想有一些用于多路阵列/张量的包,但我更喜欢使用base。

1 个答案:

答案 0 :(得分:0)

隐式回收仅适用于矢量。矩阵回收的解决方案是使用扫描功能,如记录here所述。在您的情况下,请尝试

sweep(Z,1:2,w,FUN="+")

第二个参数指定将保留Z的哪个维度。