[英]Indexing R vs Python
試圖理解數組索引 R 與 Python(准確地說是 numpy)
R版
a = array(0:7, c(2,2,2))
輸出看起來像這樣
, , 1
[,1] [,2]
[1,] 0 2
[2,] 1 3
, , 2
[,1] [,2]
[1,] 4 6
[2,] 5 7
如果我嘗試訪問第一個“元素” a[1,,]
這就是我得到的:
[,1] [,2]
[1,] 0 4
[2,] 2 6
蟒蛇版
a = np.array(range(8)).reshape((2,2,2))
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
a[0,::]
給了我不同的輸出:
array([[0, 1],
[2, 3]])
看起來索引以不同的方式工作。 我應該如何在 python 中索引以獲得與 R 版本相同的結果?
不同的結果來自於 R 和 Python 在內部存儲多維數組的兩種不同方式:
(不幸的是,“C”不代表“列”,而是代表“C 語言”...)
來源: https : //en.wikipedia.org/wiki/Row-_and_column-major_order其中說:
列優先順序用於 Fortran、MATLAB、[7] GNU Octave、S-Plus、[8] R、[9] Julia、[10] 和 Scilab。[11]
...
行優先順序是 NumPy[18](對於 Python)中的默認值。
這會影響方式的多維數組從一個維數組默認構造的,當你與你的代碼做array()
中的R函數和numpy.array()
與一起在Python功能numpy.reshape()
函數。
從 numpy 的reshape()
文檔中:
重塑(a,新形狀,訂單='C')
...
order : {'C', 'F', 'A'}, optional 使用此索引順序讀取 a 的元素,
a
使用此索引順序將元素放入重構的數組中。 'C' 表示使用類似 C 的索引順序讀取/寫入元素,最后一個軸索引變化最快,回到第一個軸索引變化最慢。 'F' 表示使用類似 Fortran 的索引順序讀取/寫入元素,第一個索引變化最快,最后一個索引變化最慢。
解決方案
在兩種語言中從一維數組定義多維數組時,您應該使用相同的索引順序。
例如,您可以通過將選項order='F'
傳遞給numpy.reshape()
函數,使用列優先順序在 Python 中定義數組,如下所示:
a = np.array(range(8)).reshape((2,2,2), order='F')
array([[[0, 4],
[2, 6]],
[[1, 5],
[3, 7]]])
現在a[0,::]
給出:
array([[0, 4],
[2, 6]])
即與 R 的a[1,,]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.