目录
⭐参数:array(object, dtype, copy, order, subok, ndmin)
一、创建数组
array() 方法
⭐参数:array(object, dtype, copy, order, subok, ndmin)
♥1.创建一维数组和二维数组
import numpy as np
n1 = np.array([1,2,3]) # 一维数组
n2 = np.array([0.1, 0.2, 0.3]) #一维数组
n3 = np.array([[1,2], [3,4]]) #二维数组
print(n1)
print(n2)
print(n3)
运行结果:
#n1
[1 2 3]
#n2
[0.1 0.2 0.3]
#n3
[[1 2]
[3 4]]
♥2.创建浮点型数组
import numpy as np
list = [1,2,3]
n1 = np.array(list, dtype=np.float_)
# 或者
n1 = np.array(list, dtype=float)
print(n1)
print(n1.dtype)
print(type(n1[0]))
运行结果:
[1. 2. 3.]
float64
<class 'numpy.float64'>
♥3.创建三维数组
import numpy as np
nd1 = [1,2,3]
nd2 = np.array(nd1, ndmin=3) # 三维数组
print(nd2)
运行结果:
[[[1 2 3]]]
empty() 方法
♥1.创建2行3列未初始化数组
import numpy as np
n = np.empty([2,3])
print(n)
运行结果:
[[9.75054990e-312 9.75054990e-312 1.23940528e-060]
[9.75054990e-312 9.75054990e-312 3.34051544e-195]]
zeros() 方法
♥1.创建用 0 填充的数组
import numpy as np
n = np.zeros((3,3), np.uint8)
print(n)
运行结果:
[[0 0 0]
[0 0 0]
[0 0 0]]
##ones() 方法
♥1.创建用1 填充的数组
import numpy as np
n = np.ones((3,3), np.uint8)
print(n)
运行结果:
[[1 1 1]
[1 1 1]
[1 1 1]]
randint() 方法
⭐参数:randint(low, high, size)
♥1.创建随机数组
import numpy as np
n1 = np.random.randint(1, 3, 10)
print('随机生成 10 个 1 ~ 3 且不包括 3 的整数:')
print(n1)
n2 = np.random.randint(5, 10)
print('size 数组大小为空随机返回一个整数:')
print(n2)
n3 = np.random.randint(5, size=(2,5))
print('随机生成 5 以内二维数组:')
print(n3)
运行结果:
随机生成 10 个 1 ~ 3 且不包括 3 的整数:
[1 1 2 2 1 2 1 1 2 1]
size 数组大小为空随机返回一个整数:
8
随机生成 5 以内二维数组:
[[2 2 2 2 1]
[3 0 0 3 2]]
二、操作数组
1.加减乘除法运算
import numpy as np
print(n1 + n2)
print(n1 - n2)
print(n1 * n2)
print(n1 / n2)
运行结果:
[4 6]
[-2 -2]
[3 8]
[0.33333333 0.5 ]
2.幂运算
import numpy as np
n1 = np.array([1,2])
n2 = np.array([3,4])
print(n1 ** n2)
运行结果:
[ 1 16]
3.比较运算
import numpy as np
n1 = np.array([1,2])
n2 = np.array([3,4])
print(n1 >= n2)
print(n1 == n2)
print(n1 <= n2)
print(n1 != n2)
运行结果:
[False False]
[False False]
[ True True]
[ True True]
4.复制数组
import numpy as np
n1 = np.array([1,2])
n2 = np.array(n1, copy=True) # 第一种方法
n3 = n1.copy() # 第二种方法
print(n3 == n2) #比较两个数组是否相同
n3[0] = 9 # 修改n2数组的第一个元素
print(n3)
print(n1)
print(n2)
print(n3 == n2) #比较两个数组是否相同
运行结果:
[ True True]
[9 2]
[1 2]
[1 2]
[False True]
三、数组的索引和切片
1.索引
import numpy as np
n1 = np.array([1,2,3])
print(n1[0])
运行结果:
1
2.切片式索引
import numpy as np
n1 = np.array([1,2,3])
print(n1[0])
print(n1[1])
print(n1[0:2])
print(n1[1:])
print(n1[:2])
运行结果:
1
2
[1 2]
[2 3]
[1 2]
语法:[start:stop:step]
import numpy as np
n = np.array([0,1,2,3,4,5,6,7,8,9])
print(n)
print(n[:3])
print(n[3:6])
print(n[6:])
print(n[::])
print(n[:])
print(n[::2])
print(n[1::5])
print(n[2::6])
# start stop step 为负数时
print(n[::-1])
print(n[:-3:-1])
print(n[-3:-5:-1])
print(n[-5::-1])
运行结果:
[0 1 2 3 4 5 6 7 8 9]
[0 1 2]
[3 4 5]
[6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 2 4 6 8]
[1 6]
[2 8]
[9 8 7 6 5 4 3 2 1 0]
[9 8]
[7 6]
[5 4 3 2 1 0]
3.二维数组索引
参数:array[n, m],表示第n个数组的第m个元素
import numpy as np
n = np.array([[0,1,2,3], [4,5,6,7], [8,9,10,11]])
print(n)
print("----------------")
print(n[1])
print(n[1,2]) # 索引1 数组 的索引2 个元素
# 或
print(n[1][2]) # 索引1 数组 的索引2 个元素
print(n[-1]) # 索引-1 数组
运行结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
----------------
[4 5 6 7]
6
6
[ 8 9 10 11]
4.二维数组切片式索引
import numpy as np
n = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(n)
print("----------------")
print(n[:2, 1:])
print(n[1, :2])
print(n[:2, 2])
print(n[:, :1])
运行结果:
[[1 2 3]
[4 5 6]
[7 8 9]]
----------------
[[2 3]
[5 6]]
[4 5]
[3 6]
[[1]
[4]
[7]]
四、创建图像
1.创建黑白图像
1.1 创建纯 黑 图像
import cv2 as cv
import numpy as np
width = 200
height = 100
# 创建指定宽高、单通道、像素值都为 0 的图像
img = np.zeros((height,width), np.uint8)
cv.imshow("img", img)
cv.waitKey()
cv.destroyAllWindows()
运行结果:
1.2 创建纯 白 图像
import cv2 as cv
import numpy as np
width = 200
height = 100
# 创建指定宽高、单通道、像素值都为 1 的图像
img = np.ones((height,width), np.uint8)*255
cv.imshow("img", img)
cv.waitKey()
cv.destoryAllWindows()
运行结果:
1.3 在黑图像内部创建白色图像
import cv2 as cv
import numpy as np
width = 200
height = 100
# # 创建指定宽高、单通道、像素值都为 0 的图像
img = np.zeros((height,width), np.uint8)
# 将图像纵坐标为 25~75 、横坐标为 50~100 的区域修改为白色
img[25:75, 50:100] = 255
cv.imshow("img", img)
cv.waitKey()
cv.destoryAllWindows()
运行结果:
1.4 创建黑白相间的图像
import cv2 as cv
import numpy as np
width = 200
height = 100
# 创建指定宽高、单通道、像素值都为 0 的图像
img = np.zeros((height,width), np.uint8)
for i in range(0, width, 40):
img[:, i:i+20] = 255 # 白色区域的宽度为20
cv.imshow("img", img)
cv.waitKey()
cv.destroyAllWindows()
运行结果:
2.创建彩色图像
import cv2 as cv
import numpy as np
width = 200
height = 100
# 创建指定宽高、3 通道、像素值都为 0 的图像
img = np.zeros((height,width, 3), np.uint8)
blue = img.copy()
blue[:, :, 0] = 255 # 1 通道所有的像素都为 255
green = img.copy()
green[:, :, 1] = 255 # 2 通道所有的像素都为 255
red = img.copy()
red[:, :, 2] = 255 # 3 通道所有的像素都为 255
cv.imshow("blue",blue)
cv.imshow("green",green)
cv.imshow("red",red)
cv.waitKey()
cv.destroyAllWindows()
运行结果:
3.创建随机图像
random.randint() 方法
import cv2 as cv
import numpy as np
width = 200
height = 100
# 创建指定宽高、单通道、随机像素值的图像,随机值在 0~256 ,数字为无符号 8 位整数
img = np.random.randint(256, size=(height,width), dtype=np.uint8) # 黑白图像
# 创建指定宽高、3 通道、随机像素值的图像,随机值在 0~256 ,数字为无符号 8 位整数
img2 = np.random.randint(256, size=(height,width, 3), dtype=np.uint8) # 彩色图像
cv.imshow("img", img)
cv.imshow("img2", img2)
cv.waitKey()
cv.destroyAllWindows()
运行结果:
五、拼接图像
1.水平拼接数组
hstack() 方法
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9])
result = np.hstack((a,b,c))
print(result)
运行结果:
[1 2 3 4 5 6 7 8 9]
2.垂直拼接数组
vstack() 方法
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9])
result = np.vstack((a,b,c))
print(result)
运行结果:
[[1 2 3]
[4 5 6]
[7 8 9]]
3.在图像处理中的应用
import cv2 as cv
import numpy as np
img = cv.imread(r'stone.jpg')
img_h = np.hstack((img, img))
img_v = np.vstack((img, img))
cv.imshow("img_h", img_h)
cv.imshow("img_v", img_v)
cv.waitKey()
cv.destroyAllWindows()
运行结果: