Skip to content

Latest commit

 

History

History
131 lines (90 loc) · 3.52 KB

numpy.md

File metadata and controls

131 lines (90 loc) · 3.52 KB

numpy基本数据类型

在使用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函数类似于zerosones,可以指定数字填充例如

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]

用numpy求解线性方程组

求解 $Ax=b$

要求解含有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)