一、数组的索引切片(Matrix slice)
1. numpy array 基本信息:
import numpy as np
# 1-D数组
z = np.array([1,2,3,4,5])
print(z) # [1 2 3 4 5]
print(z.shape) # 数组的维度,这是一个整数的元组。(5,)
print(z.size) # 5 数组元素的总数。
print(len(z)) # 5
# 2-D数组
y = np.arange(10).reshape(2,5)
print(y) # [[0 1 2 3 4] [5 6 7 8 9]]
print(y.shape) # (2, 5)
print(y.size) # 10 数组元素的总数,这等于 shape 的元素的乘积。
print(len(y)) # 2
# 3-D数组
x = np.arange(30).reshape(2,3,5)
print(x)
#[[[ 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]]]
print(x.shape) # (2, 3, 5)
print(x.size) # 30 数组元素的总数,这等于 shape 的元素的乘积。
print(len(x)) # 2
2. numpy array 索引:
import numpy as np
# 1-D数组,索引如同列表
z = np.array([1,2,3,4,5])
print(z[3]) # 4 第3+1个,因为第一位索引是0
print(z[1:3]) # [2 3] 从第二个至第三个,因为第一位索引是0,前闭后开区间z[1:3)
print(z[2:]) # [3 4 5] 从第三个至尾
print(z[:-1]) # [1 2 3 4] 从头至倒数第一个(前闭后开)
print(z[:-2]) # [1 2 3 ] 从头至倒数第二个(前闭后开)
print(z[2:-2]) # [3] 从第三个至倒数第二个,前闭后开区间z[2:-2)
# 3-D数组
x = np.arange(30).reshape(3,2,5)
print(x)
'''
[[[ 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]]]'''
print(x[0]) # [[0 1 2 3 4] [5 6 7 8 9]] 第0个元素
print(x[-2]) # [[10 11 12 13 14][15 16 17 18 19]] 倒数第2个元素
print(x[-1]) # [[20 21 22 23 24] [25 26 27 28 29]] 倒数第1个元素
print(x[0,1]) # [5 6 7 8 9] 取第0个元素的第1行
print(x[2,1]) # [25 26 27 28 29] 取第2个元素的第1行
print(x[0,1,3]) # 8 取第0个元素的第1行的第3个元素
print(x[1:])#从第1个元素开始取
'''
[[[10 11 12 13 14]
[15 16 17 18 19]]
[[20 21 22 23 24]
[25 26 27 28 29]]]'''
print(x[:1]) # [[[0 1 2 3 4] [5 6 7 8 9]]]从第0个元素取到第1个元素(前闭后开)
print(x[:2]) # 从第0个元素取到第2个元素(前闭后开)
"""[[[ 0 1 2 3 4]
[ 5 6 7 8 9]]
[[10 11 12 13 14]
[15 16 17 18 19]]]"""
print(x[:,:,1]) # [[ 1 6] [11 16] [21 26]] 取每个数组的第2个元素
print(x[-1]) # [[20 21 22 23 24] [25 26 27 28 29]]
print(x[:,1]) # [[ 5 6 7 8 9] [15 16 17 18 19] [25 26 27 28 29]] 每个2-D数组的第2行
print(x[:,1,1]) # [ 6 16 26] 每个2-D数组的第2行第2列
print(x[:,1,-1]) # [ 9 19 29] 每个2-D数组的第2行倒数第1个元素
2.1一维索引
import numpy as np
arr = np.arange(10)
print(arr)
# 结果: [0 1 2 3 4 5 6 7 8 9]
print(arr[2:6])
# 结果: [2 3 4 5]
print(arr[0::2])
# 结果: [0 2 4 6 8]
print(arr[-1::-2])
# 结果: [9 7 5 3 1]
arr[4] = 15
print(arr)
# 结果: [ 0 1 2 3 15 5 6 7 8 9]
2.2二维索引
方法一:
import numpy as np
arr = np.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
print(arr)
# 结果:
# [[ 1 2 3 4 5]
# [ 4 5 6 7 8]
# [ 7 8 9 10 11]]
print('索引第0行,第3、4列的元素为: ',arr[0,3:5])
# 结果: [4 5]
print('索引第1,2行,第3、4列的元素为: ',arr[1:3,3:5])
# 结果:
# [[ 7 8]
# [10 11]]
print('索引中,第3列的所有元素: ',arr[0:,2])
# 结果: [3 6 9]
方法二:
import numpy as np
arr = np.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
print(arr)
# 结果:
# [[ 1 2 3 4 5]
# [ 4 5 6 7 8]
# [ 7 8 9 10 11]]
print(arr[(0,1,2),(1,2,3)])
# 结果: [ 2 6 10]
print(arr[0,1],arr[1,2],arr[2,3])
# 结果: 2 6 10
print('第1,2行中的第0,2,3列元素为: ',arr[1:3,(0,2,3)])
# 结果:
# [[ 4 6 7]
# [ 7 9 10]]
二、numpy中的**
是 Python 中的升幂运算符,因此在 Python 中x2表示“x 平方”——包括 numpy。numpy 中的此类操作总是逐个元素地应用,因此x**2对数组的每个元素x(无论维数如何)进行平方,就像x*2将每个元素加倍,或者x+2将每个元素增加 2(在每种情况下,x适当的不受影响——结果是一个与x!)形状相同的新临时数组。
三、均值滤波
D:\SoftWare\Anaconda\python.exe "D:/intelligent image analysis/make noise.py"
Traceback (most recent call last):
File "D:/intelligent image analysis/make noise.py", line 101, in <module>
cv.imwrite('D:/intelligent image analysis/homework/lena_GaussNoise.png', out)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-oduouqig\opencv\modules\imgcodecs\src\loadsave.cpp:753: error: (-215:Assertion failed) !_img.empty() in function 'cv::imwrite'
Process finished with exit code 1
D:\SoftWare\Anaconda\python.exe "D:/intelligent image analysis/make noise.py"
Traceback (most recent call last):
File "D:/intelligent image analysis/make noise.py", line 87, in <module>
cv.imshow("src demo", src)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-oduouqig\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'