2、numpy之ndarray切片

2、numpy之ndarray切片_第1张图片

实例:每个子数列包含一个子数列的数组切片
import numpy as np
a=np.array([[1,2,3,4,5,6],[1,2,3,4,5]])
b=a[1:4].copy()
print('数组a的第1-3个元素:\n',a[0:3])
print('数组a的2-4个元素组成的新数组:\n',b)
a[1:3]=8
print('将数组a的第2-3个元素替换成8:\n',a)

runfile('C:/Users/xyy/.spyder-py3/temp.py', wdir='C:/Users/xyy/.spyder-py3')
数组a的第1-3个元素:
 [list([1, 2, 3, 4, 5, 6]) list([1, 2, 3, 4, 5])]
数组a的2-4个元素组成的新数组:
 [list([1, 2, 3, 4, 5])]
将数组a的第2-3个元素替换成8:
 [list([1, 2, 3, 4, 5, 6]) 8]
实例:每个子数列包含多个子数列的数组切片
import numpy as np
a=np.random.randn(3,3,3)
b=a[0:2,1:3]
print('数组a:\n',a)
print('数组a的第1个子数列的2-3个子数列的第2个元素组成的数组:\n',a[0,1:3,1])
print('数组a的1-2个子数列的2-3个子数列组成的新数组:\n',b)
a[1:3]=8
print('将数组a的2-3个子数列的元素替换成8:\n',a)

runfile('C:/Users/xyy/.spyder-py3/temp.py', wdir='C:/Users/xyy/.spyder-py3')
数组a:
 [[[-0.90269342 -0.43265603 -0.92860432]
  [ 0.25558925 -0.07598635  0.69222605]
  [ 0.8788172  -1.50049757 -1.38031517]]

 [[-0.57645489  0.36090687  2.51159765]
  [ 0.15829945 -0.66611814 -0.16076225]
  [ 0.18714922 -0.64855779 -1.63836724]]

 [[ 0.35579657  1.35175548  0.29208086]
  [ 0.65288393  1.53682559  0.29201621]
  [ 0.83269586 -2.55751786  0.82586841]]]
数组a的第1个子数列的2-3个子数列的第2个元素:
 [-0.07598635 -1.50049757]
数组a的1-2个子数列的2-3个子数列组成的新数组:
 [[[ 0.25558925 -0.07598635  0.69222605]
  [ 0.8788172  -1.50049757 -1.38031517]]

 [[ 0.15829945 -0.66611814 -0.16076225]
  [ 0.18714922 -0.64855779 -1.63836724]]]
将数组a的2-3个子数列的元素替换成8:
 [[[-0.90269342 -0.43265603 -0.92860432]
  [ 0.25558925 -0.07598635  0.69222605]
  [ 0.8788172  -1.50049757 -1.38031517]]

 [[ 8.          8.          8.        ]
  [ 8.          8.          8.        ]
  [ 8.          8.          8.        ]]

 [[ 8.          8.          8.        ]
  [ 8.          8.          8.        ]
  [ 8.          8.          8.        ]]]
实例:布尔型索引切片
import numpy as np
a=np.random.randn(3,3,3)
b=np.array(['a','b','c'])
#布尔型索引筛选
print('数组a:\n',a)
print('数组a中与数组b中元素a或c所在位置的一致的值:\n',a[(b=='a')|(b=='c')])
print('数组a中与数组b中元素a所在位置的不一致的值:\n',a[b!='a'])
print('数组a中小于0.8且大于0.4的值:\n',a[(a>0.4)&(a<0.8)])
#布尔型索引筛选后切片
print('数组a中与数组b中元素a所在位置的一致的子数列中的第一个值:\n',a[b=='a',0:1])
#布尔型索引赋值
b[b!='c']='d'
print('将数组b中不等于c的值赋为d:\n',b)

runfile('C:/Users/xyy/.spyder-py3/temp.py', wdir='C:/Users/xyy/.spyder-py3')
数组a:
 [[[ 0.9737554  -1.57542548  0.5388869 ]
  [ 0.82043092 -0.55592176 -0.75482538]
  [ 0.04980767  1.46983313  1.04191912]]

 [[-0.11622319 -1.52660474 -0.27612857]
  [-0.85539785 -0.12387973  1.81190146]
  [ 0.09030056 -0.20628459  0.18466906]]

 [[-0.32157311  0.38588188 -0.37953662]
  [ 0.69474672 -0.090586    0.66955368]
  [ 1.00127603 -0.76034316  0.02837398]]]
数组a中与数组b中元素a或c所在位置的一致的值:
 [[[ 0.9737554  -1.57542548  0.5388869 ]
  [ 0.82043092 -0.55592176 -0.75482538]
  [ 0.04980767  1.46983313  1.04191912]]
  [[-0.32157311  0.38588188 -0.37953662]
  [ 0.69474672 -0.090586    0.66955368]
  [ 1.00127603 -0.76034316  0.02837398]]]
数组a中与数组b中元素a所在位置的不一致的值:
 [[[-0.11622319 -1.52660474 -0.27612857]
  [-0.85539785 -0.12387973  1.81190146]
  [ 0.09030056 -0.20628459  0.18466906]]

 [[-0.32157311  0.38588188 -0.37953662]
  [ 0.69474672 -0.090586    0.66955368]
  [ 1.00127603 -0.76034316  0.02837398]]]
数组a中小于0.8且大于0.4的值:
 [0.5388869  0.69474672 0.66955368]
数组a中与数组b中元素a所在位置的一致的子数列中的第一个值:
 [[[ 0.9737554  -1.57542548  0.5388869 ]]]
将数组b中不等于c的值赋为d:
 ['d' 'd' 'c']
实例:花式索引切片
import numpy as np
a=np.arange(32).reshape((8,4))
print('数组a:\n',a)
# print(a[:,1:3])
#切片指定子序列、指定位置的元素
print('数组a中第2个子数列的第3个值、第4个子数列中第4个值:\n',a[[1,3],[2,3]]) #输出为两个值
print('数组a中第2、3个子数列的第2-4个值:\n',a[[1,2],1:5]) #输出为数组
print('数组a中第2个子数列的第2个值与第3个子数列的第3个值、第4个子数列的第2个值与第7个子数列的第3个值:\n',a[[[1,2],[3,6]],[[1,2]]])
print('数组a中第2个子数列的第1个值与第3个子数列的第3个值、第4个子数列的第2个值与第7个子数列的第3个值:\n',a[[[1,2],[3,6]],[[0,2],[1,2]]])
print('数组a中第2、3个子数列中所有数列的第2个值与第3个值:\n',a[[1,2]][:,[1,2]])
print('数组a中第2、3个子数列和4、6个子数列中所有子数列的第2-3个值:\n',a[[[[1,2],[3,5]]]][:,:,1:3])
#循环赋值
for i in range(8):
    a[i]=i
print('赋值后的数组a:\n',a)

runfile('C:/Users/xyy/.spyder-py3/temp.py', wdir='C:/Users/xyy/.spyder-py3')
数组a:
 [[ 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]]
数组a中第2个子数列的第3个值、第4个子数列中第4个值:
 [ 6 15]
数组a中第23个子数列的第2-4个值:
 [[ 5  6  7]
 [ 9 10 11]]
数组a中第2个子数列的第2个值与第3个子数列的第3个值、第4个子数列的第2个值与第7个子数列的第3个值:
 [[ 5 10]
 [13 26]]
数组a中第2个子数列的第1个值与第3个子数列的第3个值、第4个子数列的第2个值与第7个子数列的第3个值:
 [[ 4 10]
 [13 26]]
数组a中第23个子数列中所有数列的第2个值与第3个值:
 [[ 5  6]
 [ 9 10]]
数组a中第23个子数列和46个子数列中所有子数列的第2-3个值:
 [[[ 5  6]
  [ 9 10]]

 [[13 14]
  [21 22]]]
赋值后的数组a:
 [[0 0 0 0]
 [1 1 1 1]
 [2 2 2 2]
 [3 3 3 3]
 [4 4 4 4]
 [5 5 5 5]
 [6 6 6 6]
 [7 7 7 7]]

你可能感兴趣的:(#,numpy,python,numpy)