在使用numpy之前,我们首先需要导入numpy模块
一般情况下,为了缩写,我们会使用模块重命名导入import numpy as np
numpy中最基本的类型就是numpy的数组,例如
import numpy as np
a=np.array([1,2,3,4,5])
print(a.[0])
print(a.shape) #.shape可以返回当前数组的维度,返回类型是tuple,此处返回(5,)
b=np.zeros((3,3)) #.zeros接受一个tuple类型,返回填零的对应维度的数组,可以是n维的
c=np.ones(5) #同上,但是填1
d=b[:,1] #抽取b数组第一列的所有元素(列号下标为1)
需要注意的是,数组创建所接受的tuple类型决定了数组的维度,例如,tuple只有一个元素,那么他就创建一维数组,如果是两个,如(3,4),那么他会创建3行4列的二维数组,如果是(1,3),那么创建1行3列的二维数组(此处需要注意一下,虽然1行3列等同于只有3个元素的一维数组,但这里需要区分)
可以使用+ - * /
等运算符,相应的操作是对应元素的加减乘除,例如
a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])
c=a+b
执行结果是对应元素的加法,即 $$ \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix} + \begin{bmatrix} 5 & 6 \ 7 & 8 \end{bmatrix}
\begin{bmatrix} 6 & 8 \ 10 & 12 \end{bmatrix} $$ 如果把加法改成其他的例如乘法,也是这样的操作
如果想执行矩阵乘法,那么使用np.dot(a,b)
或a.dot(b)
另外> < **
等内置的运算符也是可以使用的,也是逐项运算
上述的np.array()
就是创建一个类型为ndarrays
的数组,他接受的参数只要是序列即可
arange()
可以创建等间隔的序列,例如
a=np.arange(5) # [0,1,2,3,4] 生成区间[0,5) 步长为1
b=np.arange(10,15) # [10,11,12,13,14] 生成区间[10,15) 步长为1
c=np.arange(0,5,2) # [0,2,4] 生成区间[0,5) 步长为2
linspace()
可以创建指定区间指定个数的序列,例如
a=np.linspace(0,100,50) # 50个数 最小的为0 最大的100 等间隔
full
函数类似于zeros
和ones
,可以指定数字填充例如
a=np.full((3,3),2) #生成3行3列的数组,每个元素都是2
eye
用于生成单位阵,例如单位矩阵
E=np.eye((3,3)) #生成一个3行3列的单位矩阵 即各个维度下标相同的位置都为1
eye
也可以接受一个整形数字,那么默认是二维的方阵
可以使用特殊函数生成数组,例如生成一个二维的随机数组,可以使用np.random.random()
r=np.random.random((3,3)) # 生成一个3行3列的随机数组
创建数组时,可以指定数据类型,为参数dtype
,可以赋予np.int64 np.float64
等
numpy可以使用,
来分隔不同的维度,这与内置的列表是不一样的,当然也可以使用列表的读取方法
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
b = a[:2, 1:3] # b = [[2,3],[6,7]]
:
选取区间,左闭右开,空缺表示默认,一般是左边表示起始位置,右边空缺表示终止为止
上述例子就表示选取0 1
两行,1 2
两列
如果只是想读取某个位置,那么直接a[1,1]
或者a[1][1]
求解
要求解含有n个未知参数,要使方程组有唯一解,则$|A|\ne0$
随机生成$A$,$b$,然后求解$x$
import numpy as np
A = np.random.random((3,3))
b = np.random.random((3,1))
x = np.linalg.solve(A,b)
print(A)
print(b)
print(x)