python numpy 中的冒号
python中冒号实际上有两个意思:
1.全部选择
matrix1[1, :]表示matrix的第1行的所有元素
matrix1[:, 1]表示matrix的第1列的所有元素
2. 表示区间, 含左不含右
matrix1[1, 0:3]表示matrix的第1行的索引为[0, 3)的元素
matrix1[:, 0:3]表示matrix的所有行的索引为[0, 3)列的元素
matrix1[:, 0:10:2]表示matrix的所有行的索引为[0, 10)列的元素,步长为2
import numpy as np
X = np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
[17,18,19,20]])
print(X[:, 0]) #[ 1 5 9 13 17]
print(X[:, 1]) #[ 2 6 10 14 18]
print(X[:,1:3])
# [[ 2 3]
# [ 6 7]
# [10 11]
# [14 15]
# [18 19]]
双冒号
Python序列切片地址可以写为[开始:结束:步长],其中的开始和结束可以省略,故双冒号实则为开始,结束有省略。
- 步长step=n;代表从start开始(start也算)每隔step间隔,取一个数,一直到结尾end
range(20)[::3]
[0,3,6,9,12,15,18]
- 当step等于负数的时候,从右向左取数
range(10)[::-1]
[9,8,7,6,5,4,3,2,1,0]
range(10)[::-2]
[9,7,5,3,1]
创建10*10的数组,要求:1,0沿着对角线间隔放置
n [40]: a = np.zeros((10, 10), dtype=np.int) //先定义一个10*10的数组
In [41]: a[0::2, 1::2] = 1 //从第二行开始,每两个为1,从置1的区域的第一列开始每两列置
In [42]: a[1::2, 0::2] = 1 //同理
In [43]: a
Out[43]:
array([[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0]])
好记性不如烂键盘---点滴、积累、进步!