当然,这个前提是所需要的python、numpy环境已经配置好了。
1.numpy简介
一个用python实现的科学计算包。包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
2.numpy基本知识入门
没有安装numpy的,可以在window系统的命令行输入:pip install numpy
安装即可
以下将以案例的形式介绍如何使用。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-07-28 13:35:28
# @Author : JackPI ([email protected])
# @Link : https://blog.csdn.net/meiqi0538
# 导包
import numpy as np
#线性方程处理
from numpy.linalg import *
def main():
#创建一个list列表
py_list=[[1,2,3],[4,5,6]]
#可以通过print(type(py_list))查看py_list的类型为list
print(type(py_list))
print(py_list)
#将列表转为np的数组类型
#其中的dtype指定数组中的数据类型(bool,int,int8/16/64/128,uint8/16/32/64/128,float,float16/32/64/128,complex64/128)
np_list=np.array(py_list,dtype=np.float)
#1.基本使用
#可以通过print(type(np_list))查看np_list的类型为numpy.ndarray
#np_list.shape:数组的形状
#np_list.ndim:数组的维度
#np_list.dtype:数组内数据的类型
#np_list.itemszie:数组内数据元素占据内存大小
#np_list.size:数组的大小(元素的个数)
print(type(np_list))
print(np_list.shape)
print(np_list.ndim)
print(np_list.dtype)
print(np_list.itemsize)
print(np_list.size)
print(np_list)
#2.常用数组
#创建2行4列的全0数组;可用于数值对比,数值初始化
print(np.zeros([2,4]))
#创建3行5列的全1数组
print(np.ones([3,5]))
#随机数的生成方法,生成2行4列的随机数矩阵(0,1),均匀分布(不加参数时:就创建一个随机数)
print(np.random.rand(2,4))
#np.random.randint(1,10,3) 生成3个随机1-10的整数
#np.random.randn(2,4) 生成2行4列的标准正太分别的随机数
#从指定内容中随机选出数据
print(np.random.choice([10,20,30,2,8]))
#生成Beta Distribution(贝叶斯分析中大量使用)
#np.random.beta(1,10,100) 生成100个,1-10 Beta分布的数据
print(np.random.beta(1,10,100))
#3.常用操作
#生成1-10,间隔为1的等差数列,并将该数列转为2行5列的数据(5也可以改为-1)
lst1=np.arange(1,11).reshape([2,5])
#将数组中的每个元素进行自然指数操作(1,2次幂)
print(np.exp(lst1))
print(np.exp2(lst1))
#开方
print(np.sqrt(lst1))
#sin
print(np.sin(lst1))
#取对数
print(np.log(lst1))
#创建三维数组
lst2=np.array([
[[1,2,3,4],
[4,5,6,7]],
[[7,8,9,10],
[10,11,12,13]],
[[14,15,16,17],
[18,19,20,21]]
])
#计算数组中所有数据的和,参数为axis,代表的时数组的维度
print(lst2.sum())
#axis=0,从外层看,只有三个元素,这样,三个元素对应的素数进行相加,如第一个:1+7+14
print(lst2.sum(axis=0))
#axis=1,再深入一层对应值进行计算,如:1+4;2+5
print(lst2.sum(axis=1))
#axis=2,再深入一层再进行计算,如:1+2+3+4;4+5+6+7
print(lst2.sum(axis=2))
#找出数组元素中,最大的值,同理也有参数axis,其用法与以上相同,相反也会有min函数计算
print(lst2.max())
#对多个数组进行操作
lst3=np.array([10,20,30,40])
lst4=np.array([4,3,2,1])
#计算两个数组对应值的和,类似地可以进行:减,乘,除,平方(lst3**2)
print(lst3+lst4)
#将一个数组追加到另一个数组
print(np.concatenate((lst3,lst4),axis=0))
#将两个数组拼成一个大数组
print(np.vstack((lst3,lst4)))
print("*"*50)
#将一个数组追加到另一个数组
print(np.hstack((lst3,lst4)))
#将数组lst3进行拆分为2个子数组
print(np.split(lst3,2))
#4.线性方程组
#n维单位矩阵
print(np.eye(3))
lst5=np.array([[1.,2.],[3.,4.]])
#获取矩阵的逆
print(inv(lst5))
#矩阵转置
print(lst5.transpose())
#求矩阵的行列式
print(det(lst5))
#求特征值(第一个)和特征向量(第二个)
print(eig(lst5))
#求解方程 1x+2y=5;3x+4y=7
y=np.array([[5.],[7.]])
print(solve(lst5,y)) #计算结果
if __name__ == '__main__':
main()