2017-03-19 26 views
2

我很驚訝發現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 

,而我預計二維矩陣w沿的Z第三個維度進行回收。我得到了與矩陣w相同的錯誤,尺寸像Z的最後2個(與numpy的廣播規則相同)。我認爲在回收利用時R會簡單地將每個數組按照尺寸順序(C風格)扁平化並添加它們,然後將它們重新整形,這將在很多維度上起作用。有沒有正確的方式來回收像我想要的矩陣?我想我可以通過操縱暗淡的屬性來做扁平化和重塑自己,但顯然不希望自己做這項工作。

語言定義有這樣一行:「也就是說,例如,如果您將c(1,2,3)添加到六元素向量,那麼您將真的添加c(1,2,3,1,2) ,3)。「任何一個看過引擎蓋的人都會告訴我R是不是從字面上創建了一個新的更長的向量,來符合另一個操作數,然後應用運算符?我一直認爲回收更節省空間。如果不是,那麼我可能會通過從矩陣創建一個3維陣列來實現更高維度的回收。我想有一些用於多路陣列/張量的軟件包,但我更喜歡使用base。

回答

0

隱式回收僅適用於矢量。如文件here所述,矩陣回收的解決方案是使用掃描功能。在你的情況下,嘗試

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

第二個參數指定Z的哪些尺寸將被保留。