numpy 是 python 中科学计算的核心库,numpy 这个词来源于 numerical 和 python 两个单词。它提供了一个高性能的多维数组对象,以及大量的库函数和操作,可以帮助程序员轻松地进行数值计算,广泛应用于机器学习模型、图像处理和计算机图形学、数学任务等领域。
1.array
numpy 中定义的最重要的对象是称为 ndarray 的 n 维数组类型,它是描述相同类型的元素集合。ndarray 中的每个元素都是数据类型对象(dtype)的对象。ndarray 中的每个元素在内存中使用相同大小的块。
方法原型:
numpy.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)
object–>一般为列表list 元组tuple或其他序列类型
dtype–>数据类型
copy–>如果为True,则object对象被复制,否则只有当__array__返回副本,object是嵌套序列,或者需要副本来满足任何其他要求时,才会生成副本
order–>指定阵列的内存布局。如果object不是数组,则新创建的数组将按行排列(C)按列排列(F),如果object是一个数组 按行(C)按列(F)按原顺序(A)按元素在内存中出现顺序(K)
subok–>默认情况下,返回的数组被强制为基类数组。如果为True,则返回子类。
ndmin–>数组的最小维数
一些参数用法示例
dtype参数用法
import numpy as np
a=[1,2,3]
b=np.array(a,dtype=float)
print(b)
print(b.dtype)
#输出
[1. 2. 3.]
float64
copy参数用法
import numpy as np
a=np.array([1,2,3])
b=np.array(a,copy=True)
a[0]=0
print(a)
print(b)
#输出
[0 2 3]
[1 2 3]
可以看到a和b的值不同,说明b是a的副本,二个是不同的对象
import numpy as np
a=np.array([1,2,3])
b=np.array(a,copy=False)
a[0]=0
print(a)
print(b)
#输出
[0 2 3]
[0 2 3]
a改变同时引起b的改变,说明a和b指向是同一个对象
subok参数用法
import numpy as np
a=np.matrix("1 4 7;2 5 8;3 6 9")
print(type(a))
print(a)
num1=np.array(a,subok=True)
num2=np.array(a,subok=False)
print(type(num1))
print(type(num2))
#输出
<class 'numpy.matrix'>
[[1 4 7]
[2 5 8]
[3 6 9]]
<class 'numpy.matrix'>
<class 'numpy.ndarray'>
2.属性
shape
:返回一个包含数组维度的元组,也可以用于调整数组维度
#例一
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a.shape)
#输出(2,3)
#例二
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
a.shape=(3,2)
print(a)
#输出
[[1 2]
[3 4]
[5 6]]
dtype
:显式object对象数据类型
astype
:类型转换
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
a=a.astype(float)
print(a)
#输出
[[1. 2. 3.]
[4. 5. 6.]]
sum
:求和
多维数组 axis=0为列 axis=1为行
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a.sum(axis=0))
print(a.sum(axis=1))
#输出
[5 7 9]
[ 6 15]
arange
:创建一个数组
原型
numpy.arange([start,] stop[,step,],dtype=None)
[]表示可选参数
start:起始值,默认为0
stop:终止值(不包含)
step:步长,默认为1
dtype:创建数据类型,如果没有提供,则会使用输入的类型
reshape
:将数组设置为几行几列。也能对原始多维数组进行修改
import numpy as np
a=np.arange(15)
print(a.reshape(3,5))
#输出
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
ndim
:显式数组维度
size
:显式数组中元素的个数
zeros
:初始化数组中的内容均为0
原型
numpy.zeros(shape,dtype=float,order='C')
注意:默认为float类型
ones
:用来构造全为1的数组
原型
numpy.noes(shape,dtype=float,order='C')
eye
:用来构造单位矩阵
random
:随机数
random.rand()
random.random(size)
random.randint(low,high=None,size=None,dtype=‘l’)
size–>整数或者元组
linspace:
创建一个一维等差数列的数组,固定元素数量
原型
numpy.linspace(start,stop,num=50,endpoint=True,restep=Flase,dtype=None)
start–>序列起始值
stop–>序列终止值,如果endpoint为True,则该值包含于数列
num–>样本数量,默认为50
endpoint–>为True,数列中包含stop值,反之不包含,默认为True
restep–>为True,生成数组显式间距
dtype–>数据类型
logspace
:创建一个等比数列的数组
原型
numpy.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)
start–>序列起始值:base**start
(幂运算)
stop–>序列终止值: base**stop
base–>对数log的底数 默认为10.0
geomspace:
创建一个一维的等比数列数组
原型
numpy.geomspace(start,stop,num=50,endpoint=True,dtype=None,axis=0)
axis–>值为0和-1时结果相同,其他时候报错(有点不懂)
在numpy中二个类型格式相同的数组可以进行运算符操作
dot
:相当于二个矩阵的乘法 ,但*为二个矩阵对应数组的乘法
import numpy as np
a=np.array([[1,1],[0,1]])
b=np.array([[2,0],[3,4]])
print(a*b)
print(a.dot(b))
print(np.dot(a,b))
#输出
[[2 0]
[0 4]]
[[5 4]
[3 4]]
[[5 4]
[3 4]]
exp
:计算e的几次方
import numpy as np
a=np.arange(3)
print(a)
print(np.exp(a))
#输出
[0 1 2]
[1. 2.71828183 7.3890561 ]
sqrt
:计算数据的平方根
import numpy as np
a=np.arange(3)
print(a)
print(np.sqrt(a))
#输出
[0 1 2]
[0. 1. 1.41421356]
resize
:重新设置矩阵的维度。无返回值
hstack
:实现矩阵的横向合并 numpy.hstack((a,b))
vstack
:实现矩阵的纵向合并
hsplit
:实现矩阵的横向切割
vsplit
:实现矩阵的纵向切割
注意切割方式若分成二分,则需要将矩阵等分,否则报错
tile
(A,rep)rep:A沿着各个维度重复的次数,对数组维度进行扩展
sort
:排序 可以将矩阵中的数据按照指定的维度大小进行排序
numpy.sort(a,axis)函数返回一个新数组
argsort
:会计算矩阵指定维度的数据从小到大的索引
import numpy as np
a=np.array([[1,3,2,6],[8,2,4,9]])
b=np.argsort(a,axis=1)
c=np.argsort(a,axis=0)
print(b)
print(c)
#输出
[[0 2 1 3]
[1 2 0 3]]
[[0 1 0 0]
[1 0 1 1]]
3.数组切片
import numpy as np
a=np.array([[1,2],[3,4],[5,6],[7,8],[9,10]])
#输出所有行的第0个元素
print(a[:,0])
#输出所有行的第1个元素
print(a[:,1])
#输出第一维所有元素
print(a[1,:])
a=np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14],[15,16,17],[18,19,20]])
#输出所有行第m到n-1列元素 含左不含右[:,m:n]
print(a[:,1:3])