提出问题
准备数据
分析数据
获得结论
成果可视化
pip install numpy
导入:
import numpy as np
np.array()创建
array()创建一个一维数组
arr_1 = np.array([1,2,3,4])
>>>
array([1, 2, 3, 4])
array()创建一个二维数组
arr_1 = np.array([[1,2,3,4],[5,6,7,8]])
>>>
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
多维数组就是列表中嵌套多个列表
引用matplotlib的pyplot模块查看图片的数组
import matplotlib.pyplot as plt
plt.imread(‘./dog.jpg‘)
>>>
array([[[183, 175, 172],
[183, 175, 172],
[182, 174, 171],
... ... ...
[ 97, 64, 57],
[ 97, 64, 57],
[ 97, 64, 57]]], dtype=uint8)
import matplotlib.pyplot as plt
dog_arr = plt.imread(‘./dog.jpg‘)
plt.imshow(dog_arr)
尝试改变数组元素的数值查看对原始图片的影响
import matplotlib.pyplot as plt
dog_arr = plt.imread(‘./dog.jpg‘)
plt.imshow(dog_arr-100)
zeros()返回一个全0的n维数组,一共有三个参数:shape(用来指定返回数组的大小)、dtype(数组元素的类型)、order(是否以内存中的C或Fortran连续(行或列)顺序存储多维数据)。后两个参数都是可选的,一般只需设定第一个参数。
import numpy as np
np.zeros(5)
>>>
array([ 0., 0., 0., 0., 0.])
np.zeros((5,), dtype=np.int)
>>>
array([0, 0, 0, 0, 0])
np.zeros((2, 1))
>>>
array([[ 0.],
[ 0.]])
ones()返回一个全1的n维数组,同样也有三个参数:shape(用来指定返回数组的大小)、dtype(数组元素的类型)、order(是否以内存中的C或Fortran连续(行或列)顺序存储多维数据)。后两个参数都是可选的,一般只需设定第一个参数。和zeros一样
np.ones(5)
>>>
array([ 1., 1., 1., 1., 1.])
np.ones((5,), dtype=np.int)
>>>
array([1, 1, 1, 1, 1])
np.ones((2, 1))
>>>
array([[ 1.],
[ 1.]])
生成指定范围内指定个数的一维数组
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None):
- 在指定的间隔[“start”,“stop”]内均匀地返回数字。
- “num”返回num个等间距的样本。
- endpoint是一个bool类型的值,如果为"Ture",“stop"是最后一个值,如果为"False”,生成的数组不会包含"stop"值
- retstep是一个bool类型的值,如果为"Ture",会返回样本之间的间隙。
其他相似的函数
- arange 和 linespace 相似,但是使用步长而不是样本的数量来确定生成样本的数量。
np.linspace(2.0, 3.0, num=5)#等差数列返回一个一维数组
>>>
array([ 2. , 2.25, 2.5 , 2.75, 3. ])
np.linspace(2.0, 3.0, num=5, endpoint=False)
>>>array([ 2. , 2.2, 2.4, 2.6, 2.8])
np.linspace(2.0, 3.0, num=5, retstep=True)
>>>
(array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
返回一个有终点和起点的固定步长的排列
1)一个参数时,终点,起点默认值0,步长默认值1。
2)两个参数时,起点,终点,步长默认值1。
3)三个参数时,起点,终点,步长。其中步长支持小数
np.arange(5)
>>>
array([0, 1, 2, 3, 4])
np.arange(5,8)
>>>
array([5, 6, 7])
np.arange(5,15,3)
>>>
array([ 5, 8, 11, 14])
np.random.randint(low, high=None, size=None, dtype=‘l‘)
作用:生成指定区间[low, high)的随机整数
参数:
-- low: 最小值,int型
-- high: 最大值,int型
-- size: 数组维度,int型或由int构成的tuple型
-- dtype: 数据类型,默认为np.int
返回:int型或者由int构成的ndarray
np.random.randint(4) # 只有一个参数,默认生成一个[0, 4)的随机整数
>>>3
np.random.randint(1, 4) # 两个参数,生成一个在[1, 4)的随机整数
>>>
2
np.random.randint(4,size=3) # 生成3个[0, 4)的随机整数
>>>
array([0, 2, 3])
np.random.randint(-2,5,size=(2,4)) # 在[-2,5]区间上,生成shape为2*4的随机整数
>>>
array([[ 2, 0, 0, 2],
[ 1, -2, 1, 3]])
np.random.rand(d0, d1, ..., dn)
作用:生成[0, 1)之间的指定形状的随机浮点数
参数:d0, d1, ..., dn,int类型,如不写则返回单个随机数
返回:ndarray类型,形状(d0, d1, ..., dn)
np.random.rand() # 没有参数则直接生成一个[0,1)区间的随机数
>>>
0.1065982531337718
np.random.rand(3) # 只有一个参数则生成n*1个随机数
>>>
array([0.24640203, 0.81910232, 0.79941588])
np.random.rand(2, 3, 4) # 有多个参数,则生成对应形状随机数,如本例生成shape为2*3*4的随机数
>>>
array([[[0.73222489, 0.80656115, 0.65878337, 0.69227656],
[0.84919565, 0.24966801, 0.48942496, 0.22120944],
[0.98766801, 0.94405934, 0.03942681, 0.70557517]],
[[0.92524832, 0.18057535, 0.56794523, 0.9154883 ],
[0.03394598, 0.69742027, 0.29734901, 0.9243962 ],
[0.97105825, 0.94426649, 0.47421422, 0.86204265]]])
np.random.randn(d0, d1, ..., dn)
作用:生成指定形状,服从标准正态分布(均值为0,标准差为1)的随机数
参数:d0, d1, ..., dn,int型,如不写则返回单个标准正态分布实例
返回:ndarray类型,形状(d0, d1, ..., dn)
np.random.randn() # 没有参数则直接随机生成一个标准正态分布实例
>>>
0.4125703966441225
np.random.randn(3) # 只有一个参数则生成n*1的服从标准正态分布的随机数
>>>
array([-1.9296846 , -0.65058484, 1.04354591])
np.random.randn(2, 3, 4) # 有多个参数,则生成对应形状标准正态分布随机数,如本例生成shape为2*3*4的服从标准正态分布的随机数
>>>
array([[[ 0.86776502, 0.28303221, -1.34946357, 0.58550346],
[ 0.71339959, 0.04701721, 1.22317095, -0.68343179],
[-0.50985758, -2.48461158, 0.91982751, 0.31386196]],
[[-1.68182033, -1.758599 , -0.87263063, 0.79365794],
[-0.30036049, -0.80478692, -1.00611589, -1.05091196],
[-1.9336783 , -1.20739583, -1.07057808, 0.68262324]]])
np.random.random(size=None)
作用:从给定的一维数组中生成随机数
参数:
-- a: 一维数组或int型
-- size: 数组维度,int型或由int构成的tuple型
-- replace: 布尔型,False时生成的随机数无重复
-- p: 为a的数据设置概率,不设置时默认为均匀分布
返回:单个样本或多个样本构成的ndarray类型
np.random.random() # 没有参数,直接生成一个[0, 1)区间随机浮点数
>>>
0.15893828327675652
np.random.random(3) # 一个参数,生成[0, 1)区间shape为3*1的随机浮点数
>>>
array([0.77282278, 0.23005368, 0.13133513])
np.random.random(size=(3, 4)) # tuple型参数,生成[0, 1)区间shape为3*4的随机浮点数
>>>
array([[0.86805432, 0.96323665, 0.03130231, 0.73127007],
[0.90952451, 0.85736009, 0.96452047, 0.76009408],
[0.44229876, 0.31195199, 0.32074274, 0.72442267]])
np.random.choice(a, size=None, replace=True, p=None)
作用:从给定的一维数组中生成随机数
参数:
-- a: 一维数组或int型
-- size: 数组维度,int型或由int构成的tuple型
-- replace: 布尔型,False时生成的随机数无重复
-- p: 为a的数据设置概率,不设置时默认为均匀分布
返回:单个样本或多个样本构成的ndarray类型
np.random.choice([1, 3, 5, 7]) # 只有一个参数a,从a中随机选一个
>>>
7
np.random.choice([1, 3, 5, 7], size=2) # 指定size,从a中随机选2个
>>>
array([1, 7])
np.random.choice([1, 3, 5, 7], size=(2, 3)) # size为tuple,从a中随机选2*3个
>>>
array([[5, 3, 3],
[1, 1, 3]])
np.random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9], size=(2, 3), replace=False) # replace设置为false时,生成的随机数不重复
>>>
array([[7, 2, 6],
[4, 1, 5]])
np.random.choice([1, 2, 3, 4], size=2, p=(0.1, 0.2, 0.3, 0.4)) # 设置p,根据p的权重随机挑选
>>>
array([4, 4])
更多详细用法参照官方文档:https://numpy.org/devdocs/reference/
a = np.arange(15).reshape(3, 5)
>>>
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
a.shape
>>>
(3, 5)
a.ndim
>>>
2
a.size
>>>
15
a.dtype
>>>
dtype(‘int32‘)
arr = np.array([1,2,3],dtype="int64")
>>>
dtype(‘int64‘)
arr.dtype = ‘float32‘
>>>
dtype(‘float32‘)
a = np.arange(15).reshape(3, 5)
a
>>>
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
a[2][1] #索引取值
>>>
11
a = np.arange(15).reshape(3, 5)
a[:2]
>>>
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
a = np.arange(15).reshape(3, 5)
a[:,0:2] #逗号左边是数组的第一个维度,右边是第二个维度
>>>
array([[ 0, 1],
[ 5, 6],
[10, 11]])
a = np.arange(15).reshape(3, 5)
a[:,0:2]
>>>
array([[0, 1],
[5, 6]])
a = np.arange(15).reshape(3, 5)
print(a) #多维显示
>>>
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
a[::-1] #行倒置
>>>
array([[10, 11, 12, 13, 14],
[ 5, 6, 7, 8, 9],
[ 0, 1, 2, 3, 4]])
a[:,::-1] #列倒置
>>>
array([[ 4, 3, 2, 1, 0],
[ 9, 8, 7, 6, 5],
[14, 13, 12, 11, 10]])
a[::-1,::-1] #行列倒置
>>>
array([[14, 13, 12, 11, 10],
[ 9, 8, 7, 6, 5],
[ 4, 3, 2, 1, 0]])
#将图片上下翻转
import matplotlib.pyplot as plt
dog_arr = plt.imread(‘./dog.jpg‘)
plt.imshow(dog_arr[::-1])
#将图片左右翻转
import matplotlib.pyplot as plt
dog_arr = plt.imread(‘./dog.jpg‘)
plt.imshow(dog_arr[:,::-1,:])
#将图片颜色进行反转
import matplotlib.pyplot as plt
dog_arr = plt.imread(‘./dog.jpg‘)
plt.imshow(dog_arr[:,:,::-1])
b = np.random.randint(0,100,size=(4,6))
>>>
array([[66, 7, 47, 0, 34, 19],
[74, 99, 41, 49, 85, 1],
[88, 78, 43, 78, 57, 93],
[68, 67, 70, 55, 68, 14]])
b.reshape((3,8))
>>>
array([[59, 18, 21, 42, 33, 6, 20, 92],
[92, 10, 39, 7, 27, 37, 90, 64],
[95, 95, 73, 72, 94, 2, 60, 11]])
b.reshape((2,-1)) #-1表示自动计算
>>>
array([[54, 75, 43, 89, 18, 38, 60, 6, 82, 29, 40, 41],
[27, 35, 64, 16, 18, 53, 26, 84, 6, 94, 14, 67]])
- 将多个numpy数组进行横向或者纵向的拼接
c = np.random.randint(0,20,size=(3,4))
d = np.random.randint(0,20,size=(3,2))
np.concatenate((c,d),axis=1)
>>>
array([[ 2, 14, 12, 11, 0, 12],
[ 8, 12, 5, 3, 7, 0],
[10, 0, 13, 9, 0, 18]])
import matplotlib.pyplot as plt
dog_arr = plt.imread(‘./dog.jpg‘)
arr_3 = np.concatenate((dog_arr,dog_arr,dog_arr),axis=1)
arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0)
plt.imshow(arr_9)
sum,max,min,mean
d = np.random.randint(0,20,size=(3,2))
print(d)
d.sum(axis=1)#求所有行的和
>>>
[[10 3]
[ 3 3]
[ 8 2]]
array([13, 6, 10])
d = np.random.randint(0,20,size=(3,2))
print(d)
axis = 0#求所有列的和
>>>
[[16 16]
[ 5 4]
[ 4 15]]
array([25, 35])
d = np.random.randint(0,20,size=(3,2))
print(d)
axis = None#求所有元素的和
>>>
[[ 4 18]
[ 3 10]
[ 9 8]]
52
常用的数学函数
d = np.random.randint(0,20,size=(3,2))
print(d)
np.around(d,decimals=-1)
>>>
[[10 12]
[ 1 13]
[16 19]]
array([[10, 10],
[ 0, 10],
[20, 20]])
原文:https://www.cnblogs.com/remixnameless/p/13205330.html