文章参考 https://zhuanlan.zhihu.com/p/32242331,例子都是一个一个敲得,python3 莫得问题嘞呀
切换清华下载源 ,scipy 以及matplotlib 可结合 numpy 实现更多计算以及绘图
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple测试安装
>>> from numpy import * >>> eye(4) array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]])array() 函数创建 Ndarray 对象
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)名称 描述
object 数组或嵌套的数列dtype 数组元素的数据类型,可选copy 对象是否需要复制,可选order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)subok 默认返回一个与基类类型一致的数组ndmin 指定生成数组的最小维度 np.array([1, 2, 3, 4], ndmin=3) = [[[1 2 3 4]]]np.vstack((a,b)) 将 a, b 矩阵由原来两行两列,合并为四行两列
np.hstack((a,b)) 将 a, b 矩阵由原来两行两列,合并为两行四列
np.concatenate( (a1,a2), axis=0 ) 等价于 np.vstack( (a1,a2) ) np.concatenate( (a1,a2), axis=1 ) 等价于 np.hstack( (a1,a2) )
b = a[a>6] 返回结果为一维数组 a[a>6] = 0 将原矩阵中所有 大于6 的元素赋值为0
a.shape 返回结果为含两个元素的元组 如:(2,5)及 2 行 5 列
a = np.arange(10) # 默认从0开始到10(不包括10),步长为1 返回 [0 1 2 3 4 5 6 7 8 9]
a2 = np.arange(5,20,2) # 从5开始到20(不包括20),步长为2,返回 [ 5 7 9 11 13 15 17 19]
a = np.linspace(0,20,5) # 生成首位是0,末位是20,含5个数的等差数列 返回 [ 0. 5. 10. 15. 20.]
logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0):
num为数列个数默认50,base 为指数底数 默认10 及为公比
返回结果为 [ 1. 2. 4. 8. 16. 32.] 从 1 开始,2^5 结束,以公比为 2 开始递增, 总共 6 个数= a = np.logspace(start=0, stop=5, num=6, base=2)
a = np.logspace(start=0, stop=0, num=6, base=5) # 返回结果为 [1, 1, 1, 1, 1, 1]
ones创建全1矩阵 ,zeros创建全0矩阵 ,eye创建单位矩阵 ,empty创建空矩阵(实际有值)
a_empty = np.empty((2, 2)) # 创建2*2的空矩阵 返回[[0.33930547, 0.75305503],[0.77334359, 0.12428655]]
np.fromstring(‘abcdefg’, dtype=np.int8) # 返回结果为 [ 97 98 99 100 101 102 103]
np.floor(10*np.random.random((2, 5))) # 返回结果为 [[3., 6., 6., 6., 3.], [1., 5., 3., 3., 9.]]
fromfunction(func,(5,6)) 第一个参数为 生成矩阵方法,第二个参数为矩阵大小
def func(i,j): return i+j a = np.fromfunction(func,(5,6)) # 返回 [[ 0. 1. 2. 3. 4. 5.] [ 1. 2. 3. 4. 5. 6.] [ 2. 3. 4. 5. 6. 7.] [ 3. 4. 5. 6. 7. 8.] [ 4. 5. 6. 7. 8. 9.]]需满足第一个矩阵的 列数 等于第二个矩阵行数
a = np.array([[4, 5, 6], [1, 2, 3]]) b = np.array([[6, 5, 4], [3, 2, 1]]) print(a*b) """ [[24 25 24] [ 3 4 3]] """如下所示 矩阵乘和点乘是不同的,矩阵相乘适用于 行列相同的矩阵,对应位置相乘,而矩阵点乘适用于第一个矩阵的列数等于第二个矩阵的行数
注意: 矩阵乘积 设A为 m * p 的矩阵,B为 p* n 的矩阵,那么称 A * B 的矩阵C为矩阵A与B的乘积 哈达马积(Hadamard product) 设矩阵 A 和矩阵 B 都是 m*n 的矩阵,及行列相同,则称 A * B 的矩阵 C 为哈达马积 克罗内克积(Kronecker Product) 克罗内克积是两个任意大小的矩阵间的运算,符号记作⊗。克罗内克积也被称为直积或张量积
设A是一个n阶矩阵,若存在另一个n阶矩阵B,使得: AB=BA=E ,则称方阵A可逆,并称方阵B是A的逆矩阵
需要先导入numpy.linalg,用linalg的inv函数来求逆
import numpy.linalg a1 = np.array([[2, 4, 4], [4, 8, 6], [2, 8, 4]]) print(numpy.linalg .inv(a1)) """ 可能会报 numpy.linalg.LinAlgError: Singular matrix,奇异矩阵,代表当前矩阵无逆矩阵 [[ 0. 0.5 -0.5 ] [-0.25 0. 0.25] [ 0.5 -0.25 0. ]] """mean() 函数,同样可以通过添加 axis 获取行列平均值 a.mean()、 a.mean(axis=0)、 a.mean(axis=1)
var() 函数,同样可以添加 axis 获取行列方差 a.var()、 a.var(axis=0) 、 a.var(axis=1)
std()函数,同样可以添加 axis 获取行列标准差 a.std()、 a.std(axis=0)、 a.std(axis=1)
median(),同样可以添加 axis 获取行列中值 numpy.median(a)、 numpy.median(a, axis=1)、 numpy.median(a, axis=0):与其他写法不同
sum()函数,同样可以添加 axis 获取行列和 a.sum()、 a.sum(axis=0)、 a.sum(axis=1)
cumsum()函数,同样可以添加 axis 获取行列累积和
a = np.array([[1,2,3],[4,5,6]]) print(a.cumsum()) # 对整个矩阵求累积和 # 结果 [ 1 3 6 10 15 21]ptp() 函数,同样可以添加 axis 获取行列极差 a.ptp()、 a.ptp(axis=0)、 a.ptp(axis=1)
Numpy 可以读写磁盘上的文本数据或二进制数据。
NumPy 为 ndarray 对象引入了一个简单的文件格式:npy。
npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。
常用的 IO 函数有:
load() 和 save() 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中。
np.save(file='outfile.npy', arr=[1, 2, 3, 4], allow_pickle=True, fix_imports=True) print(np.load('outfile.npy')) # 结果 """ [1 2 3 4] """savez() 函数用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npz 的文件中。
np.savez(file='outfile.npz', arr_0=[1, 2, 3], arr_1=[4, 5, 6], allow_pickle=True, fix_imports=True) print(np.load('outfile.npz')['arr_0']) """ [1 2 3] """loadtxt() 和 savetxt() 函数处理正常的文本文件(.txt 等)
np.savetxt('out.txt',[1,2,3,4,5]) print(np.loadtxt('out.txt')) # 结果 """ [1 2 3 4 5] """