2017-03-19 12 views
2

Iは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 

IはZの第3の次元に沿ってリサイクルする2Dマトリクスw期待一方。私はZの最後の2のような次元を持つ行列w(numpyの放送規則のように)で同じエラーを受け取ります。 Rをリサイクルすると、次元(Cスタイル)の順に各配列が単純に平坦化され、それらが追加された後、それらが再構成され、多くの次元で機能します。私がしようとしているように、マトリックスをリサイクルする正しい方法はありますか?私はぼんやりした属性を操作することで自分自身を平らにしたり形を整えたりすることができたと思いますが、明らかに自分自身でやり直したくないと思います。

言語定義には次のような行があります。たとえば、6要素のベクトルにc(1、2、3)を追加すると、実際にc(1,2,3,1,2 、3)。 "フードの下を見ている人は、Rが文字通り短い方の新しい長いベクトルを作成していて、もう一方のオペランドに適合させてから演算子を適用するかどうかを教えてくれますか?私はリサイクルがよりスペース効率が良いと仮定していました。そうでなければ、マトリックスから3方向配列を作成することによって、より高次元のリサイクルを達成することもできます。私は多方向配列/テンソルのためのパッケージがあると思いますが、私は基底を使うことを好むでしょう。

答えて

0

暗黙のリサイクルは、ベクターでのみ機能します。マトリックスリサイクルの解決策は、文書化されたhereのように掃引機能を使用することです。あなたのケースでは、試してみてください

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

第2引数は、保存するZの寸法を指定します。

関連する問題