2017-04-09 156 views
0
import numpy as np 
r = np.arange(36) 
r.resize((6, 6)) 

print(r) 
# prints: 
# [[ 0 1 2 3 4 5] 
# [ 6 7 8 9 10 11] 
# [12 13 14 15 16 17] 
# [18 19 20 21 22 23] 
# [24 25 26 27 28 29] 
# [30 31 32 33 34 35]] 

print(r[:,::7]) 
# prints: 
# [[ 0] 
# [ 6] 
# [12] 
# [18] 
# [24] 
# [30]] 

print(r[:,0]) 
# prints: 
# [ 0 6 12 18 24 30] 

r[:,::7]給了我一個專欄,r[:,0]給了我一行,他們都有相同的數字。如果有人能向我解釋爲什麼會很高興?用numpy切片陣列?

+0

請解釋'r [:,7]'和'r [:,0]'具有相同的數字嗎? – Divakar

+0

@Divakar爲什麼不應該包含相同的數字? 'r [:,:: 7]'只是'r [:, 0:6:7]'形狀'(6,6)'的數組。 – MSeifert

+0

@ MSeifert啊是的!只是第一個使用了一系列的索引,而後者使用標量進行索引。感謝您指出! – Divakar

回答

2

由於step參數大於相應的形狀,所以您只需獲取第一個「行」。然而,這些並不完全相同(即使它們包含相同的數字),因爲[:, 0]中的標量索引展平了相應的維度(因此您將得到一維數組)。但是[:, ::7]將保持尺寸數量不變,但會改變分步尺寸的形狀。