import numpy as ny
"""
和列表不同的是,通过切片获取的新数组是原始数组的一个视图。它与原始数组共享同一
块数据存储空间,所以原始数组也一定会变化
"""
a=ny.arange(10,1,-1)
b=a[3:7]
print('a: ',a)
print('b: ',b)
b[2]=100
print('after b: ',b)
print('after a: ',a)
"""
a: [10 9 8 7 6 5 4 3 2]
b: [7 6 5 4]
after b: [ 7 6 100 4]
after a: [ 10 9 8 7 6 100 4 3 2]
"""
"""
获取数组x中下标为 3、3、1、8的4 个元素,组成一个新的数组
"""
c=a[[3,3,1,8]]
d=a[ny.array([3,3,1,8])]
print('c: ',c)
print('d: ',d)
#多维数组也是适用的
e=a[ny.array([[3,3,1,8],[3,3,-3,8]])]
print('e: \n',e)
"""
c: [7 7 9 2]
d: [7 7 9 2]
e:
[[7 7 9 2]
[7 7 4 2]]
"""
x = ny.random.rand(10) # 产生一个长度为 10、元素值为0到 1 的随机数组
print('x: ',x)
print('after x: ',x>0.5)
print('after x: ',x[x>0.5])
"""
x: [0.11735827 0.14931258 0.90332179 0.69256899 0.48639278 0.99080655
0.9962788 0.57468302 0.91736589 0.90630687]
after x: [False False True True False True True True True True]
after x: [0.90332179 0.69256899 0.99080655 0.9962788 0.57468302 0.91736589
0.90630687]
"""
#使用切片来访问多维数组
a=ny.array([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]).reshape(5,5)
print('a[0,3:5]: ',a[0,3:5])
print('a[4:,4:]: ',a[4:,4:])
"""
a[0,3:5]: [4 5]
a[4:,4:]: [[25]]
"""
a = ny.arange(0, 60, 10).reshape(-1, 1)+ny.arange(0,6)
print('a: \n',a)
"""
a:
[[ 0 1 2 3 4 5]
[10 11 12 13 14 15]
[20 21 22 23 24 25]
[30 31 32 33 34 35]
[40 41 42 43 44 45]
[50 51 52 53 54 55]]
"""
#slice 对象
#在[]中可以使用以冒号隔开的两个或三个整数表示切片,但是单独生成切片对象时需要
#使用 slice()创建。它有三个参数,分别为开始值、结束值和间隔步长,当这些值需要省略时
#可以使用None
idx = slice(None, None, 2), slice(2,None)
#a[idx][idx]=a[::2,2:][::2,2:]
print('a[idx][idx]: \n',a[idx][idx])#其实相当于做了两道过滤
print('a[::2,2:]: \n',a[::2,2:])
"""
a[idx][idx]:
[[ 4 5]
[44 45]]
a[::2,2:]:
[[ 2 3 4 5]
[22 23 24 25]
[42 43 44 45]]
"""