2017-11-12 3 views
1

これらの2つのことを反対であると考えるのは正しいですか?これは私の混乱の大きな原因となっています。以下 pandas/numpyの軸はRのMARGINの反対ですか?

私はRとPythonのデータフレームの列和を見つける例です。 MARGINaxisの反対の値に注目してください。 R(列マージンすなわち、MARGIN=2を使用)で

Pythonで
m <- matrix(1:6, nrow=2) 
apply(m, MARGIN=2, mean) 
[1] 1.5 3.5 5.5 

(行軸、すなわち、axis=0を使用):

In [25]: m = pd.DataFrame(np.array([[1, 3, 5], [2, 4, 6]])) 
In [26]: m.apply(np.mean, axis=0) 
Out[26]: 
0 1.5 
1 3.5 
2 5.5 
dtype: float64 

答えて

3

R「は列であるため、これが起こります(Fortranのような) "主要な"言語であるのに対し、NumPyとPandasは "行優先"(Cのような)です。あなたは列優先の基盤となるストレージを変更するnumpyの、でorder='F'を設定しても、APIはまだ基本的に行優先です。

(R 1ベースであるため、1)そうです、numpyのとパンダに、最初の次元(0)はRの最初の次元に対し、行を指す列を指します。私が最初に来るどの次元説明した上

。適用DIMENSIONどちらについてapply()会談は同様に寸法がを保持しているとして、「オーバー」であるため、混乱も生じます。つまり、行がapply()の場合、結果は長さが入力の列数であるベクトルになります。あなたが見ることができるように、

axis : {0 or ‘index’, 1 or ‘columns’} 
    0 or ‘index’: apply function to each column 
    1 or ‘columns’: apply function to each row 

0は((行)の寸法が保持され、列の次元が 『上に適用』される指標は、このように解消意味:この特定の混乱はパンダのドキュメント(ただし、Rさん)によって強調されています)。言い換えれば、列上のアプリケーションはaxis=0またはMARGIN=2であり、行のアプリケーションはaxis=1またはMARGIN=1です。 1の値は一致しているようですが、それは偽です。つまり、Pythonが0ベースであるため、Pythonの1が2番目の次元です。

+1

語源とニーモニックをありがとう。残念ながら、Rの最初の次元は依然として行を参照しています( 'help(apply)'から:行列1は行を表し、2は列を表します**)。この違いを理解したり覚えたりする別の方法がありますか? – Heisenberg

+1

@ Heisenberg私は違いが行ごとにそれを行うと各行の操作をしていると思います。 numpy/pandasでは、 'sum(axis = 0)'を使うとき、行全体に渡って合計を取ることを意味します(実際には列方向の集約です)。 – ayhan

+0

@Heisenberg:私はそれを明確にするために私の答えに追加しました。最終的に覚えておくのは、それを練習することだけです。最終的に考える必要はありません。 –

関連する問題