标签:矩阵 min() atp 图片 参数 变化 sqrt 岗位 单位
使用np的routines函数创建
使用array()创建一个一维数组
import numpy as np
arr = np.array([1,2,3,4,5])
# 结果:
array([1, 2, 3, 4, 5])
np.array([[1,2,3],[4,5,6]])
# 结果:
array([[1, 2, 3],
[4, 5, 6]])
数组和列表的区别是什么?
列表中可以存储不同类型的数据
数组中存储的数据元素类型必须一致
str > float > int 数据类型的优先级
np.array([[1,2,3],[4,'five',6]])
# 如果在一个整数的数组中插入一个字符串,然后就会将全部的数据元素都转换成字符串
# 结果:
array([['1', '2', '3'],
['4', 'five', '6']], dtype='<U11')
import matplotlib.pyplot as plt
#图片数据的读取
img_arr = plt.imread('./1.jpg')
#将一个三维的numpy数组显示成一张图片
plt.imshow(img_arr-100)
# img_arr-100 会对每个这个照片中的每一个数值进行减100
? 可以看出在对这个照片的数值进行修改之后,照片的颜色发生了改变;
np.zeros(shape=(3,3))
# 结果:
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
np.ones(shape=(3,4)
# 结果
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
np.linspace(0,100,num=20) # 一维等差数列
# 结果:
array([ 0. , 5.26315789, 10.52631579, 15.78947368,
21.05263158, 26.31578947, 31.57894737, 36.84210526,
42.10526316, 47.36842105, 52.63157895, 57.89473684,
63.15789474, 68.42105263, 73.68421053, 78.94736842,
84.21052632, 89.47368421, 94.73684211, 100. ])
np.arange(0,100,2) # 一维等差数列
# 结果:
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,
34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66,
68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98])
np.random.randint(0,80,size=(5,8))
# 结果:
array([[29, 8, 73, 0, 40, 36, 16, 11],
[54, 62, 33, 72, 78, 49, 51, 54],
[77, 69, 13, 25, 13, 30, 30, 12],
[65, 31, 57, 36, 27, 18, 77, 22],
[23, 11, 28, 74, 9, 15, 18, 71]])
size
里边的值是行和列,相当于二维,里边每增加一个数就会则增加一个维度
np.random.random(size=(3,4))
# 结果:
array([[0.0768555 , 0.85304299, 0.43998746, 0.12195415],
[0.73173462, 0.13878247, 0.76688005, 0.83198977],
[0.30977806, 0.59758229, 0.87239246, 0.98302087]])
下面的是一个三维数组:
np.random.random(size=(2,3,4))
# 结果:
array([[[0.88291734, 0.1809206 , 0.35617448, 0.3049914 ],
[0.72609875, 0.26811569, 0.34519581, 0.35372182],
[0.26311417, 0.54276554, 0.2561482 , 0.30583742]],
[[0.0986709 , 0.82136811, 0.41041769, 0.4089922 ],
[0.5390292 , 0.60816895, 0.5686751 , 0.07936629],
[0.98708008, 0.36585268, 0.30857405, 0.40176834]]])
#固定随机性
np.random.seed(10)#固定时间种子
np.random.randint(0,100,size=(2,3))
# 结果:
array([[ 9, 15, 64],
[28, 89, 93]])
arr = np.random.randint(0,100,size=(5,6))
# 结果:
array([[88, 11, 17, 46, 7, 75],
[28, 33, 84, 96, 88, 44],
[ 5, 4, 71, 88, 88, 50],
[54, 34, 15, 77, 88, 15],
[ 6, 85, 22, 11, 12, 92]])
下边是这些属性的作用展示:
arr.shape
# 结果:
(5, 6)
arr.ndim
# 结果:
2
arr.size
# 结果:
30
arr.dtype
# 结果:
dtype('int32')
查看一下arr
是什么类型
type(arr)
# 结果:
numpy.ndarray
#通过dtype修改数据的数据类型
arr.dtype = 'int16'
# 结果:
dtype('int16')
意义:可以让我们取出numpy数组中任意指定的局部数据
索引操作和列表同理
arr = np.random.randint(0,100,size=(3,4))
# 生成的数组
array([[ 1, 61, 28, 6],
[85, 87, 91, 3],
[ 6, 98, 91, 54]])
arr[1] #取一行
# 结果:
array([85, 87, 91, 3])
arr[[1,2]] #取多行
# 结果:
array([[ 1, 61, 28, 6],
[85, 87, 91, 3]])
#切出前两行数据
arr[0:2]
array([[ 1, 61, 28, 6],
[85, 87, 91, 3]])
#切出前两列数据
#arr[hang,lie]
arr[:,:2]
array([[ 1, 61],
[85, 87],
[ 6, 98]])
#切出前两行的前两列的数据
arr[:2,:2]
array([[ 1, 61],
[85, 87]])
#列反转
arr[:,::-1]
array([[ 6, 28, 61, 1],
[ 3, 91, 87, 85],
[54, 91, 98, 6]])
#行反转
arr[::-1]
array([[ 6, 98, 91, 54],
[85, 87, 91, 3],
[ 1, 61, 28, 6]])
#元素反转
arr[::-1,::-1]
array([[54, 91, 98, 6],
[ 3, 91, 87, 85],
[ 6, 28, 61, 1]])
img_arr.shape
(554, 554, 3)
#将一张图片反转
plt.imshow(img_arr[::-1,::-1,::-1])
<matplotlib.image.AxesImage at 0x224149be4e0>
reshape
arr = np.array([[1,2,3],[4,5,6]])
arr.shape
(2, 3)
#将多维变一维
arr_1 = arr.reshape((6,))
array([1, 2, 3, 4, 5, 6])
#一维变多维
arr_1.reshape((6,1))
array([[1],
[2],
[3],
[4],
[5],
[6]])
arr_1.reshape((3,-1)) #-1表示自动计算行或者列数
array([[1, 2],
[3, 4],
[5, 6]])
arr = np.array([[1,2,3],[4,5,6]])
n_arr = arr
display(arr,n_arr)
array([[1, 2, 3],
[4, 5, 6]])
array([[1, 2, 3],
[4, 5, 6]])
# axis=0 等于0表示列,等于1表示行
np.concatenate((arr,n_arr),axis=0)
# 按列匹配级联
array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
np.concatenate((a,arr),axis=1)
array([[1, 2, 1, 2, 3],
[3, 4, 4, 5, 6]])
让照片按九宫格显示:
arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)
arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0)
plt.imshow(arr_9)
<matplotlib.image.AxesImage at 0x224145d9978>
x = np.array([[2,2,3],[1,2,3]])
y = np.array([[1,1,3],[2,2,4]])
display(x,y)
array([[2, 2, 3],
[1, 2, 3]])
array([[1, 1, 3],
[2, 2, 4]])
x+y
array([[3, 3, 6],
[3, 4, 7]])
arr1 = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]])
# arr1.shape = (4,3)
arr2 = np.array([1, 2, 3])
display(arr1,arr2)
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3]])
array([1, 2, 3])
arr1 + arr2
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
arr = np.array([[8,20,5],[6,52,45]])
# 对每一行求和
arr.sum(axis=1)
array([ 33, 103])
# 求每一行的最大值
arr.max(axis=1)
array([20, 52])
# 求每一列的最小值
arr.min(axis=0)
array([ 6, 20, 5])
# 求每一列的平均值
arr.mean(axis=0)
array([ 7., 36., 25.])
arr = np.array([[8,20,5],[6,52,45]])
np.sin(arr)
array([[ 0.98935825, 0.91294525, -0.95892427],
[-0.2794155 , 0.98662759, 0.85090352]])
arr = np.array([1.4,4.7,5.2])
array([1.4, 4.7, 5.2])
np.around(arr,decimals=0) #对小数进行四舍五入
array([1., 5., 5.])
np.around(arr,decimals=-1) # 最对小数点的前一位进行四舍五入
array([ 0., 0., 10.])
arr = np.random.randint(60,100,size=(5,3))
array([[92, 75, 93],
[85, 69, 97],
[60, 78, 83],
[63, 89, 76],
[80, 78, 74]])
np.amin(arr,axis=1)
array([75, 69, 60, 63, 74])
np.ptp(arr,axis=0)
array([32, 20, 23])
np.median(arr,axis=0)
array([80., 78., 83.])
#标准差:std = sqrt(mean((x - x.mean())**2))
arr = np.array([1,2,3,4,5])
((arr - arr.mean())**2).mean()**0.5
1.4142135623730951
arr.std()
1.4142135623730951
#方差:mean((x - x.mean())**2)
arr.var()
2.0
NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。一个 的矩阵是一个由行(row)列(column)元素排列成的矩形阵列。
import numpy.matlib as matlib
matlib.empty(shape=(5,6))
matrix([[1.16302223e-311, 1.16302228e-311, 1.16302223e-311,
1.16302226e-311, 1.16302223e-311, 1.16302226e-311],
[1.16302356e-311, 1.16302355e-311, 1.16302226e-311,
1.16302222e-311, 1.16302222e-311, 1.16302226e-311],
[1.16302223e-311, 1.16302223e-311, 1.16302747e-311,
1.16302356e-311, 1.16302747e-311, 1.16302228e-311],
[1.16302223e-311, 1.16302223e-311, 1.16302356e-311,
1.16302449e-311, 1.16302228e-311, 1.16302228e-311],
[1.16302364e-311, 1.16302364e-311, 1.16302226e-311,
1.16302278e-311, 1.16302228e-311, 1.16302228e-311]])
matlib.ones(shape=(3,4))
matrix([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
matlib.eye(n=5,M=4,k=0)
matrix([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.],
[0., 0., 0., 0.]])
matlib.eye(n=5,M=5,k=2)
matrix([[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
# 当k的值变化时,矩阵的对角线在移动
matlib.identity(5)
matrix([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
arr = np.random.randint(0,100,size=(5,5))
array([[51, 79, 17, 50, 53],
[25, 48, 17, 32, 81],
[80, 41, 90, 12, 30],
[81, 17, 16, 0, 31],
[73, 64, 38, 22, 96]]
arr.T
array([[51, 25, 80, 81, 73],
[79, 48, 41, 17, 64],
[17, 17, 90, 16, 38],
[50, 32, 12, 0, 22],
[53, 81, 30, 31, 96]])
矩阵相乘
numpy.dot(a, b, out=None)
第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。
线性代数基于矩阵的推导:
a = np.array([[2,1],[4,3]])
b = np.array([[1,2],[1,0]])
display(a,b)
array([[2, 1],
[4, 3]])
array([[1, 2],
[1, 0]])
np.dot(a,b)
array([[3, 4],
[7, 8]])
标签:矩阵 min() atp 图片 参数 变化 sqrt 岗位 单位
原文地址:https://www.cnblogs.com/zhufanyu/p/12024951.html