Numpy基本用法简介

Stella981
• 阅读 762
import numpy as np 
'''
数组基础操作
    np.array()              创建数组
    arr.shape               返回数组arr的size(行,列)
    arr.reshape(size)       改变数组的size, 元素个数要以一致
    arr.dtype()             查看元素类型 dtype

'''

import numpy as np
from numpy.random import randn
'''
常用函数:
    np.arange(a,b,step=)   创建等差数组
    np.sqrt(arr)           数组中的每个元素开方
    np.exp(arr)            数组中的每个元素取e的指数
    randn(size())          随机产生size()的正态分布的数组
    np.maximum(x,y)        每个元素取x,y中大者
    np.where(cond,x,y)  三元表达式 x if cond else y
'''

import numpy as np
'''
数学统计方法
sum               求和
mean              求平均数
std               标准差
var               方差
min,max           最小值、最大值
argmin、argmax    最小值、最大值的所以
cumsum            所有元素的累计和
cumprod           所有元素的累计积
'''

'''
布尔运算: 布尔值会被强制转换为1(True)、0(False)
any: 用于测试数组中是否存在True
all: 检测数组中元素是否都是True
'''

'''
排序
sort:  sort是在数组本身所处理,如原来数组还有用的话
       则需要对数组复制保存
'''

'''
唯一化
unique(x)              计算x中唯一元素,并返回有序结果
intersect1d(x,y)       计算x,y的公共元素,并返回有序结果
union1d(x,y)           计算x,y的并集,并返回有序结果
in1d(x,y)              x的元素是否包含于y,返回布尔型
setdiff1d(x,y)         集合的差,元素在中且不再y中
setxor1d(x,y)          集合的对称差,即元素在一个元素中但不同时在两个数组中
'''

'''
数组的文件
np.save('file_name',arr)
    默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为
    .npy的文件中的
np.load('file_name.npy')
    读取文件中的数组
np.savez('file_name.npz',a=arr1,b=arr2,...)
    savez将多个文件压缩到一个文件夹中,将数组以关键字参数的
    形式传入。加载。npz文件时,会得到一个类似字典的对象
'''

'''
读取文本文件
    load.txt('file_name.txt',delimiter=',')
保存数组到文件中
    savetxt('file_name',arr1)
'''

'''
线性代数
    矩阵乘法
    矩阵分解
    行列式
    ...
矩阵乘法
    dot(x,y)  矩阵x与矩阵y的乘机
        x = np.array([[1,2,3],[4,5,6]])
        y = np.array([[1,2],[3,4],[5,6]])
        np.dot(x,y)
矩阵的转置:
    x.T  x的转置
矩阵的逆:
    from numpy.linalg import inv,qr
    inv(x)  x的逆
QR分解
    q,r = qr(x)  x的qr分解
总结
    diag       以一位的形式返回方阵的对角线元素
                或将一位数组转化为矩阵(非对角线元素为0)
    dot         矩阵乘法
    trace       迹,对角线元素的和
    det         矩阵的行列式
    eig         特征值和特征向量
    inv         逆
    pinv        Moore-Penrose伪逆
    qr          qr分解
    svd         svd分解
    slove       解方程Ax=b
    lstsq       计算最小二乘解

'''

'''
随机数的生成
numpy.random 模块中的函数
    seed          确定随机数生成器的种子
    permutation   返回一个序列的随机排列或返回一个随机排序的范围
    shuffle       对一个序列随机排序
    rand          产生均匀分布的样本值
    randint       从给定上下限范围中随机选取整数
    randn         产生正态分布(平均值为0,标准差为1)的样本值,类似于matlab借口
    binomial      产生二项分布样本值
    normal        产生正态分布的样本值
    beta          产生Beta分布的样本值
    chisquare     产生卡方分布的样本值
    gamma         产生Gamma分布的样本值
    unifrom       产生均匀分布的样本值
'''

'*****************一个例子---随机漫步 python实现*******************'

import numpy as np
from numpy.random import randn

import random
position = 0
walk = [position]
steps = 1000
for i in range(steps):
    step = 1 if random.randint(0,1) else -1
    position += step
    walk.append(position)

'numpy实现'
nsteps = 1000
draws = np.random.randint(0,2,size=nsteps)
steps = np.where(draws>0,1,-1)
walks = steps.cumsum()
print(walks.min())
print(walks.max())
n1 = (np.abs(walks)>=10).argmax()
print(n1)

'************一次模拟多个随机漫步*************'

nwalks = 5000
nsteps = 1000
draws = np.random.randint(0,2,size=(nwalks,nsteps))
steps = np.where(draws>0,1,-1)
walks = steps.cumsum(1)
print(walks.max(),walks.min())

本文参考书籍《利用Python进行数据分析》

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
翼
3年前
js 数组 转为树形结构
需要转换为树形的数组vardata{"orderById":null,"platformCommissionProportion":1,"name":"添加剂","pid":13,"id":26
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Java修道之路,问鼎巅峰,我辈代码修仙法力齐天
<center<fontcolor00FF7Fsize5face"黑体"代码尽头谁为峰,一见秃头道成空。</font<center<fontcolor00FF00size5face"黑体"编程修真路破折,一步一劫渡飞升。</font众所周知,编程修真有八大境界:1.Javase练气筑基2.数据库结丹3.web前端元婴4.Jav
Wesley13 Wesley13
3年前
Java开发者容易犯的十个错误
!(https://oscimg.oschina.net/oscnet/c9f00cc918684fbe8a865119d104090b.gif)Top1.数组转换为数组列表将数组转换为数组列表,开发者经常会这样做:\java\List<StringlistArrays.asList(arr);Arr
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Stella981 Stella981
3年前
HashMap 的底层实现原理
HashMap是一个用于存储KeyValue键值对的集合,每一个键值对也叫做Entry。这些个Entry分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。 !(https://oscimg.oschina.net/oscnet/8495d30fe00a2865dd74088d2
Wesley13 Wesley13
3年前
ES6 新增的数组的方法
给定一个数组letlist\//wu:武力zhi:智力{id:1,name:'张飞',wu:97,zhi:10},{id:2,name:'诸葛亮',wu:55,zhi:99},{id:3,name:'赵云',wu:97,zhi:66},{id:4,na
达里尔 达里尔
1年前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数