2017-04-09 115 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]将保持尺寸数量不变,但会改变分步尺寸的形状。