前言
NumPy是一个功能强大的Python库,允许更高级的数据操作和数学计算。在机器学习模型、图像处理和计算机图形学、数学任务等方面有着充分作用。后期可能会写OpenCV相关的博客,因为这是与Numpy非常相关,而个人非常感兴趣的部分。
本文主要是个人学习笔记,与各位小伙伴分享,不喜勿喷。
理解Numpy(简单入门)
numpy中的数组
一维与二维数组
import numpy as np
my_array = np.array([i for i in range(10)]) # [0 1 2 3 4 5 6 7 8 9]
print(my_array[0]) # 0
my_array[0] = -1 # 修改值
print(my_array) # 打印 ——> [-1 1 2 3 4 5 6 7 8 9]
print(my_array.shape) # (10,) my_array的形状
my_new_array = np.zeros((5)) # 创建一个长度为5的NumPy数组,但所有元素都为0
print(my_new_array, type(my_new_array), my_new_array[0]) # [0. 0. 0. 0. 0.] <class 'numpy.ndarray'> 0.0
ones = np.ones((10)) # [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] #元素全为1
my_random_array = np.random.random((5)) # 生成随机数组 每个元素分配0到1之间的随机值。 如 0.27316213
my_2d_array = np.zeros((2, 3)) # 生成二维数组,np.ones((3,3))
my_array_zd = np.array([[4, 5], [6, 1]]) # 指定
my_array_column_2 = my_array_zd[:, 1] # 拿到二维数组的,每一行的二号元素
print(my_array_column_2)
# 取元素
# my_array_zd [0][0] #C语言数组语法
"""
import numpy as np
q = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
print(q[0, 0], q[0][0], sep="\n")
"""
数组的简单操作
简单加减乘除
import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
b = np.array([[5.0, 6.0], [7.0, 8.0]])
sum = a + b # 对应元素相加
"""
就是a[0][0]+b[0][0],a[0][1]+b[0][1]
"""
difference = a - b # 对应元素相减
product = a * b # 对应元素相乘
quotient = a / b # 对应元素相除
print("Sum = \n", sum)
print("Difference = \n", difference)
print("Product = \n", product)
print("Quotient = \n", quotient)
矩阵乘法
import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
b = np.array([[5.0, 6.0], [7.0, 8.0]])
matrix_product = a.dot(b)
print(matrix_product) # 矩阵乘法,要有一定线性代数基础
# a为MxN矩阵,b为NxD矩阵,才可以相乘,结果r为MxD矩阵
NumPy 基础操作
创建数组
简单矩阵
import numpy as np
a = np.array([i for i in range(20)]) # 传入一个列表
q = np.array([[np.arange(5, 10)], # for 循环里面的range
[np.ones(5)],
[np.zeros(5)],
[np.random.random(5)],
[np.linspace(0, 2 * np.pi, 5)]
]) # 以上元素可以单独拿出来创建数组,如b=np.ones(5) >>>[1. 1. 1. 1. 1. ]
print(a)
print(q)
其他数组
创建正对角线为1,其他为0的矩阵
import numpy as np
a = np.eye(3, 3) # 创建正对角线为1,其他为0的矩阵
print(a)
生成均匀分段的数组
import numpy as np
# 函数linspace在指定的时间间隔内返回均匀间隔的数字
num = np.linspace(0, 10, num=4)
print(num)
多维数组(以三维举例)
import numpy as np
array = np.arange(27).reshape(3,3,3) # 数组形状控制,x,y,z
print(array)
Python数组转换为数组
import numpy as np
l = [(1, 2, 3), (4, 5, 6)]
print(type(l), type(l[0]))
array = np.array(l) # Python数组转换
print(array)
random库
import numpy as np
n = np.random.random((2, 2)) # 2x2的[0,1)数字
print(np.random.randint(1, 20)) # 随机抽一个数
print(np.random.choice(10, 11)) # 生成11为0-9的数
索引与切片
多维数组切片
import numpy as np
a = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
print(a[2, 4]) # >>>25
print(a[0, 1:4]) # >>>[12 13 14]
print(a[1:4, 0]) # >>>[16 21 26]
print(a[::2,::2]) # >>>[[11 13 15]
# [21 23 25]
# [31 33 35]]
print(a[:, 1]) # >>>[12 17 22 27 32]
切指定元素
import numpy as np
# 选取我们指定的元素,列表切片
a = np.arange(0, 100, 10)
indices = [1, 5, -1] # 列表切片
b = a[indices]
print(a) # >>>[ 0 10 20 30 40 50 60 70 80 90]
print(b) # >>>[10 50 90]
缺省切片
b = a[:5]
c = a[a >= 50]
print(b) # >>>[ 0 10 20 30 40]
print(c) # >>>[50 60 70 80 90]
Where 函数
import numpy as np
# Where
a = np.arange(0, 100, 10)
b = np.where(a < 50)
c = np.where(a >= 50)[0]
print(b) # >>>(array([0, 1, 2, 3, 4]),)
print(c) # >>>[5 6 7 8 9]
数据属性及类型与数学运算
数据属性
import numpy as np
# Array properties
a = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28 ,29, 30],
[31, 32, 33, 34, 35]])
print(type(a)) # >>><class 'numpy.ndarray'>
print(a.dtype) # >>>int64
print(a.size) # >>>25
print(a.shape) # >>>(5, 5)
print(a.itemsize) # >>>8
print(a.ndim) # >>>2
print(a.nbytes) # >>>200
数据类型
import numpy as np
x = np.array([1, 2]) # Let numpy choose the datatype
print(x.dtype) # int32
x = np.array([1.0, 2.0]) # Let numpy choose the datatype
print(x.dtype) # float64
# dtype参数
x = np.array([1, 2], dtype=np.int64) # Force a particular datatype
print(x.dtype) # int64
数学运算
加减乘除、矩阵乘法
import numpy as np
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
# Elementwise sum; both produce the array
# [[ 6.0 8.0]
# [10.0 12.0]]
print(x + y)
print(np.add(x, y))
# Elementwise difference; both produce the array
# [[-4.0 -4.0]
# [-4.0 -4.0]]
print(x - y)
print(np.subtract(x, y))
# Elementwise product; both produce the array
# [[ 5.0 12.0]
# [21.0 32.0]]
print(x * y)
print(np.multiply(x, y))
# Elementwise division; both produce the array
# [[ 0.2 0.33333333]
# [ 0.42857143 0.5 ]]
print(x / y)
print(np.divide(x, y))
# Elementwise square root; produces the array
# [[ 1. 1.41421356]
# [ 1.73205081 2. ]]
print(np.sqrt(x))
sum等运算
# dot, sum, min, max, cumsum
a = np.arange(10)
print(a.sum()) # >>>45
print(a.min()) # >>>0
print(a.max()) # >>>9
print(a.cumsum()) # >>>[ 0 1 3 6 10 15 21 28 36 45]
总结
关于Numpy的学习,要有一定的线性代数基础,至于一些涉及时间的操作和线性代数的函数,在使用时,参考专业文档,多实战,拿来主义。
Numpy中文网
Numpy官网