Python: numpy模块

numpy 模块
内容基于jupyter notebook而来,In [*]以下内容为代码,Out[*]为输出结果;
由于执行顺序不一样,可能会有些数据上下文衔接不上,重点是使用方法。
  • NumPy(Numerical Python) 是 Python 语言中做科学计算的基础库。重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。
In [3]:
import numpy as np
# 使用array()来创建一个一维数组
arr = np.array([1,2,3,4,5])
arr
Out[3]:
array([1, 2, 3, 4, 5])
In [6]:
# 使用array()来创建一个多维数组
np.array([[1,2,3,4,5],[6,7,8,9,10]])
Out[6]:
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])

数组中存储的数据元素类型必须是统一类型

优先级:字符串 > 浮点型 > 整数
In [7]:
np.array([[1,2,3],[4.1,5,6]])
Out[7]:
array([[1. , 2. , 3. ],
[4.1, 5. , 6. ]])

用numpy的routines函数来创建数组:zeros(),ones(),linespace(),arange(),random

In [35]:
np.zeros(5)
Out[35]:
array([0., 0., 0., 0., 0.])
In [36]:
np.ones(shape=(2,3))
Out[36]:
array([[1., 1., 1.],
[1., 1., 1.]])
In [38]:
np.linspace(0,20,num=4)
Out[38]:
array([ 0. , 6.66666667, 13.33333333, 20. ])
In [39]:
np.arange(0,20,step=2)
Out[39]:
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
In [42]:
# 随机
np.random.randint(0,20,size=(2,3))
Out[42]:
array([[ 7, 19, 17],
[ 8, 3, 14]])
In [46]:
# 固定随机性
# np.random.seed()的作用: 当设置相同的seed时,每次生成的随机数也相同,如果不设置seed,则每次生成的随机数都会不一样
np.random.seed(23)
np.random.randint(0,20,size=(2,3))
Out[46]:
array([[19, 6, 8],
[ 9, 8, 13]])
In [47]:
arr.shape # 形状
Out[47]:
(2, 5)
In [48]:
arr.ndim #维度
Out[48]:
2
In [49]:
arr.size # 返回元素个数
Out[49]:
10
In [53]:
type(arr)
Out[53]:
numpy.ndarray
In [50]:
arr.dtype # 数组元素类型
Out[50]:
dtype('int32')

array(dtype=?):可以设定数据类型

arr.dtype = '?':可以修改数据类型
In [35]:
np.zeros(5)
Out[35]:
array([0., 0., 0., 0., 0.])
In [36]:
np.ones(shape=(2,3))
Out[36]:
array([[1., 1., 1.],
[1., 1., 1.]])
In [38]:
np.linspace(0,20,num=4)
Out[38]:
array([ 0. , 6.66666667, 13.33333333, 20. ])
In [39]:
np.arange(0,20,step=2)
Out[39]:
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
In [42]:
# 随机
np.random.randint(0,20,size=(2,3))
Out[42]:
array([[ 7, 19, 17],
[ 8, 3, 14]])
In [46]:
# 固定随机性
# np.random.seed()的作用: 当设置相同的seed时,每次生成的随机数也相同,如果不设置seed,则每次生成的随机数都会不一样
np.random.seed(23)
np.random.randint(0,20,size=(2,3))
Out[46]:
array([[19, 6, 8],
[ 9, 8, 13]])
In [47]:
arr.shape # 形状
Out[47]:
(2, 5)
In [48]:
arr.ndim #维度
Out[48]:
2
In [49]:
arr.size # 返回元素个数
Out[49]:
10
In [53]:
type(arr)
Out[53]:
numpy.ndarray
In [50]:
arr.dtype # 数组元素类型
Out[50]:
dtype('int32')

常用的统计函数

numpy.amin() 和 numpy.amax(),用于计算数组中的元素沿指定轴的最小、最大值。
numpy.ptp():计算数组中元素最大值与最小值的差(最大值 - 最小值)。
numpy.median() 函数用于计算数组 a 中元素的中位数(中值)
标准差std():标准差是一组数据平均值分散程度的一种度量。
公式:std = sqrt(mean((x - x.mean())**2))
如果数组是 [1,2,3,4],则其平均值为 2.5。 因此,差的平方是 [2.25,0.25,0.25,2.25],并且其平均值的平方根除以 4,即 sqrt(5/4) ,结果为 1.1180339887498949。
方差var():统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)。换句话说,标准差是方差的平方根。
In [101]:
a = np.array([22,33,22,34,41,45])
np.amin(a)
Out[101]:
22
In [102]:
np.amax(a)
Out[102]:
45
In [104]:
np.ptp(a)
Out[104]:
23
In [106]:
a = np.array([1,2,3,4])
a.std()
Out[106]:
1.118033988749895
In [107]:
a.var()
Out[107]:
1.25

矩阵相乘

numpy.dot(a, b, out=None)
a : ndarray 数组
b : ndarray 数组
第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。
a1 = np.array([[2,1],[4,3]])
a2 = np.array([[1,2],[1,0]])
np.dot(a1,a2)
Out[108]:
array([[3, 4],
[7, 8]])

将外部的一张图片读取加载到numpy数组中

import matplotlib.pyplot as plt
# 将图片数据进行读取,返回的是一个三维数组, 需安装pillow组件
img_arr = plt.imread('./hold.jpg')
 
# 讲数组中的数据进行图像显示
plt.imshow(img_arr)

# 将数组中的每一个数组元素都减去100
plt.imshow(img_arr-100)

# 将图片进行左右翻转
plt.imshow(img_arr[:,::-1,:])

# 将图片上下翻转
plt.imshow(img_arr[::-1,:,:])
Out[15]:
<matplotlib.image.AxesImage at 0x2056545a8b0>

# 将图片中“心”字裁剪出来
plt.imshow(img_arr[260:360,250:480,:]) # 裁剪时,第一个对应y轴,第二个对应x轴,

# 实现图片的九宫格
arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1) # axis=1 表示行
arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0) # axis=0 表示列
plt.imshow(arr_9)

 
参考:bilibili.com/video/BV1tE411F7do(P34~35)
posted @ 2020-05-09 07:44  danvy617  阅读(224)  评论(0编辑  收藏  举报