文章目录
Numpy
NumPy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy 支持向量处理 ndarray 对象,提高程序运算速度。
ndarray对象的属性
NumPy 最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。
数组创建
numpy.array函数生成多维数组
原型numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
向array函数传递一个列表类型的参数。每一个列表元素是一维的ndarray类型数组,作为二维数组的行。
通过 ndarray 类的 shape 属性可以获得数组每一维的元素个数(元组形式),也可以通过shape[n]形式获得每一维的元素个数,其中n是维度,从 0 开始。
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print(a.shape)
print(a.shape[1])
'''
[[1 2 3]
[4 5 6]
[7 8 9]]
(3, 3)
3
'''
numpy.arange函数创建数值范围
原型numpy.arange(start, stop, step, dtype)
a = np.arange(10, 20, 2,dtype=float)
print(a)
print(a.shape)
b = np.array([np.arange(1,4), np.arange(4,7), np.arange(7,10)])
print(b)
print(b.shape)
'''
[10. 12. 14. 16. 18.]
(5,)
[[1 2 3]
[4 5 6]
[7 8 9]]
(3, 3)
'''
numpy.random模块创建随机数组
random模块包含了很多方法可以用来产生随机数,random 中的一些常用方法:
# 返回[0.0, 1.0)范围的随机数
x1 = np.random.random(size=4)
print(x1)
x2 = np.random.random(size=(3,4))
print(x2)
# 生成[low,high)范围的随机整数
y1 = np.random.randint(5,size=10)
print(y1)
y2 = np.random.randint(5,10,size=(2,5))
print(y2)
# 正太分布(高斯分布)loc:期望 scale:方差 size 形状
print(np.random.normal(loc=3,scale=4,size=(2,2,3)))
'''
[0.75617673 0.0867879 0.39283977 0.04067108]
[[0.5845038 0.82715603 0.21760229 0.75216679]
[0.08367774 0.83766457 0.9341052 0.15900966]
[0.17243234 0.82217484 0.47456685 0.36939375]]
[0 4 1 3 1 3 4 2 3 0]
[[6 9 8 7 8]
[7 9 9 9 6]]
[[[10.04927289 5.53607405 7.69652097]
[ 7.2704039 -0.05533848 -2.02073794]]
[[ 9.01640789 -3.14352798 5.47406642]
[ 1.84576422 -3.39346506 1.570987 ]]]
'''
numpy.zeros等函数创建指定大小数组
- numpy.zeros创建指定大小的数组,数组元素以0来填充
- numpy.ones 创建指定形状的数组,数组元素以1来填充
- numpy.empty创建一个指定形状、数据类型且未初始化的数组,里面的元素的值是之前内存的值
相同参数列表numpy.empty(shape, dtype = None, order = 'C')
import numpy as np
a = np.zeros(5)
print(a)
b = np.ones(5, dtype=int)
print(b)
c = np.empty([3,2], dtype=int)
print(c)
'''
[0. 0. 0. 0. 0.]
[1 1 1 1 1]
[[ 0 1072168960]
[ 0 1072168960]
[ 0 0]]
'''
其它函数
numpy.zeros_like(arr)
numpy.ones_like(arr)
numpy.linspace函数创建等差数列
原型np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
import numpy as np
x = np.linspace(1,10,10)
print(x)
x2 = np.linspace(10,20,5,endpoint=True,retstep=True)
print(x2)
'''
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
(array([10. , 12.5, 15. , 17.5, 20. ]), 2.5)
'''
numpy.logspace函数创建等比数列
原型np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
import numpy as np
x = np.logspace(0,9,10,base=2)
print(x)
'''
[ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
'''
数组的其他操作
reshape函数修改数组形状。
切片和索引进行修改和访问
所有切片取出来的数组,即使你把它赋值给了新的变量,它仍是原来数组的视图。
import numpy as np
a = np.arange(1,13).reshape(4,3)
print('数组元素')
print(a)
# 使用索引获取
# 所有行的第二列
print(a[:,1])
# 同时获取第三行第二列,第四行第一列
print(np.array((a[2,1],a[3,0])))
print(a[(2,3),(1,0)])
# 行列都倒序
print(a[::-1,::-1])
数组复制提取:copy函数、切片
import numpy as np
a = np.arange(1,13).reshape(4,3)
print(a)
# copy()函数实现数组的复制
b = np.copy(a[:2,:2])
print(b)
c = np.array(a[:2,:2])
print(c)
改变数组的维度
- reshape方法可以将一维数组变成二维、三维或者多维数组。
- ravel 方法或flatten 方法可以将多维数组变成一维数组。
- 直接设置 Numpy 数组的shape 属性(元组类型)
- resize 方法改变数组的维度
import numpy as np
a = np.arange(24)
print(a)
# 使用reshape将一维数组变成三维数组
b = a.reshape(2,3,4)
print(b)
c = a.reshape(3,8)
print(c)
# 使用ravel函数将三维的b变成一维的数组
a1 = b.ravel()
print(a1)
#使用 flatten 函数将二维的 c 变成一维的数组
a2 = c.flatten()
print(a2)
数组的拼接
如果拼接的行和列数目不同,则会报错。
- numpy.concatenate函数用于沿指定轴连接相同形状的两个或多个数组。
axis参数指沿着它连接数组的轴,默认为0(垂直方向)。1(水平方向) - numpy.hstack函数通过水平堆叠来生成数组。
- numpy.vstack函数通过垂直堆叠来生成数组。
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a)
b=np.array([['a','b','c'],['d','e','f']])
print(b)
print(np.concatenate([a,b]))
print(np.concatenate([a,b],axis=1))
print(np.vstack([a,b]))
print(np.hstack([a,b]))
numpy.split函数数组分割
原型numpy.split(ary, indices_or_sections, axis)
参数说明:
- arry:被分割的数组。
- indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置。
- axis:沿着哪个维度进行切分,默认为 0,横向切分。为 1 时,纵向切分。
import numpy as np
x=np.arange(1,9)
a=np.split(x,4)
print(a)
b=np.split(x,[3,5])
print(b)
'''
[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]
'''
numpy.transpose函数进行数组转置
import numpy as np
a=np.arange(1,13).reshape(3,4)
print(a)
print(a.transpose())
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[[ 1 5 9]
[ 2 6 10]
[ 3 7 11]
[ 4 8 12]]
'''
算数运算
- 加减乘除: add(),subtract(),multiply() 和divide()。
直接使用print(np.add(a,b))
# 通用函数指定输出结果的用法
import numpy as np
x = np.arange(5)
y = np.empty(5)
np.multiply(x, 10, out=y)
print(y)
- numpy.around() 函数返回指定数字的四舍五入值。
numpy.around(a,decimals)
参数说明:
a: 数组。
decimals: 舍入的小数位数。 默认值为 0。 如果为负,整数将四舍五入到小数点左侧的位置。 - numpy.floor() 返回数字的下舍整数。
- numpy.ceil() 返回数字的上入整数。
聚合函数
- numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。
- numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。算术平均值是沿轴的元素的总和除以元素的数量。
- numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。算术平均值是沿轴的元素的总和除以元素的数量。
import numpy as np
a=np.arange(12).reshape(3,4)
print(a)
print(np.power(a,2))
print(np.median(a))
print(np.median(a,axis=1)) # 行
print(np.mean(a))
print(np.mean(a,axis=0)) # 列
'''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 1 4 9]
[ 16 25 36 49]
[ 64 81 100 121]]
5.5
[1.5 5.5 9.5]
5.5
[4. 5. 6. 7.]
'''