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序列切片地址可以写为[开始:结束:步长],其中的开始和结束可以省略,故双冒号实则为开始,结束有省略。

  1. 步长step=n;代表从start开始(start也算)每隔step间隔,取一个数,一直到结尾end
range(20)[::3] 
[0,3,6,9,12,15,18]

  1. 当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]])
posted @ 2023-02-23 21:34  无左无右  阅读(255)  评论(0编辑  收藏  举报