Learn_for_Numpy

数组转置和交换轴

转置

矩阵的行列交换

1. numpy.where (x if condition else y)

result = [(x if c else y) for x, y, c in zip(arr1, arr2, arr3)]
等价于np.where(arr1, arr2, arr3)
arr = np.random.randn(4, 4)#生成一个4行4列的矩阵
np.where(arr > 0, 2, -2)#根据arr>0的Boolean类型,如果为True则arr中对应位置填为2,否则为-2。其中where中的第一个变量为condition(条件)
########################################################################
np.where(arr > 0, 2, arr)

2. 数学计算和统计方法

np.mean(arr) <==> arr.mean()
np.sum(arr)  <==> arr.sum()
np.std(arr)  <==> arr.std()
#针对每行进行的操作,如求和或者求平均值
arr.mean(axis = 1) <==> np.mean(arr, axis = 1)
#针对每列进行的操作,如求和
arr.sum(axis = 0)  <==> np.sum(arr, axis = 0)    #
##############################################################################   
cumsum 和 cumprod #分别为计算轴向累加和,累积
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
arr.cumsum(axis = 0) <==>[[0, 1, 2],
                          [3, 5, 7],
                          [9, 12, 15]]
arr.cumprod(axis = 1)
############################################################################
min && max 求最大值最小值
argmin && argmax 返回最大值最小值的索引

3. 布尔矩阵的方法

#布尔值分为1(True)和 0(False)
arr = np.random.randn(100)
(arr > 0).sum()#求正数的个数
#any 常用来检测是否有不少于一个的True;all常用来检测是否全为True
bools = np.array([False, False, True, False])
bools.any()#True
bools.all()#False

4. 排序

#sort
arr = np.random.randn(5, 3)
arr.sort(1)#arr每行中的数据进行升序排序 arr会变为排序以后的

5. unique和其他集合操作

#本部分介绍基于集合的一些操作
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
np.unique(names)#输出为['Bob', 'Joe', 'Will'],并做了排序
np.unique等价于sorted(set(names)
##########################################################################
np.in1d(arr1, list)#主要是判断arr1与list中的值得关系
values = np.array([6, 0, 0, 3, 2, 5, 6])
np.in1d(values, [2, 3, 6])#返回array([True, False, False, True, True, False, True])
#########################################################################
intersect1d(x, y)#对x和y中共有的元素进行排序(交集),是集合操作(元素唯一性)
union1d(x, y)#对x和y中所有的元素进行排序(并集),集合操作
setdiff1d(x, y)#求出只存在于x中的元素集合
setxor1d(x, y)#求出分别只存在于x和y中的元素集合

线性代数

np.dot(x, y) <==> x.dot(y)#表示矩阵x与y的乘积
x @ y#表达的意思与上面一致
#########################################################################
from numpy.linalg import inv, qr
X = np.random.randn(5, 5)
mat = X.T.dot(X)
inv(mat)#求矩阵mat的逆
mat.dot(inv(mat))#矩阵乘以它的逆等于单位阵

numpy.linalg
|函数 |说明|
|-|:-:|-:|
diag | 返回矩阵的对角线元素或者创建对角线元素等于特定值的矩阵
dot | 矩阵乘积
trace | 计算矩阵对角线元素之和(即矩阵的迹)
det | 计算矩阵的行列式,求矩阵的值
eig | 计算矩阵(方阵)的特征值和特征向量返回的第一个参数是特征值,第二个参数为特征向量
inv | 计算矩阵(方阵)的逆
pinv | 计算矩阵(方阵)的Moore-Penrose伪逆
qr | 计算矩阵的QR分解
svd | 计算奇异值分解svd
solve | 解线性方程组Ax = b, 其中A为方阵
lstsq | 计算Ax = b的最小二乘解

随机数生成

numpy.random
|函数名|描述|
|-|:-:|-:|
|seed|随机数种子|
|permutation|随机打乱数组,可支持array_like,int,返回打乱后得array|
|shuffle|随机打乱数组,只能是array_like,默认返回空值|
rand|返回指定数组形状的0-1范围的随机浮点数
randint(low, high, size)|产生指定范围[low, high)的随机数,size是元组表示产生的形状size = (2, 4)为2*4的矩阵
randn|产生标准正太分布随机数
binomial|产生二项分布随机数binomial(n, p, size),n试验次数、概率、轮数
normal|正态(高斯)分布,normal([local, scale, seize])
uniform|均匀分布,uniform([low, high, size])

随机游走

#生成1000个随机数
import numpy as np 
import matplotlib.pyplot as plt
nsteps = 1000
draws = np.random.randint(0, 2, size = nsteps)
steps = np.where(draws > 0, 1, -1)#draws > 0 ,利用了矩阵的广播特性,判断出True or False,True为1,False为-1
walk = steps.cumsum()#累和
walk.min()#矩阵的操作求得最小值,max为最大值
#假如我们想要知道随机游走第一次达到离源点的距离达到一个Value,可以采用
(np.abs(walk) >= Value).argmax()


#一次性生成多个随机游走模型
nwalks = 5000 #5000个随机模型
nsteps = 1000 #随机走1000步

draws = np.random.randint(0, 2, size = (nwalks, nsteps))
steps = np.where(draws > 0, 1, -1)
walks = steps.cumsum(1)#得出5000个随机游走模型的1000步对应的值
hits30 = (np.abs(walks) >= 30).any(1)#得出有绝对值大于30的行,返回[False,....,False, True, ..., False]
hits30.sum()#统计有大于的随机模型的个数
crossing_times = (np.abs(walks[hits30]) >= 30).argmax(1)#其中walks[hits30]返回有绝对值大于30的处理后矩阵,np.abs(walks[hits30])>=30返回大于30为True,小于30为False的bool类型矩阵,最后返回第一次满足大于30的索引
crossing_times.mean()#返回第一次满足大于30的需要的平均步数
######出来上述的0,1分布来生成随机数外,也可以采用其他的,如正态分布
steps = np.random.normal(loc = 0, scale = 0.25, size = (nwalks, nsteps))
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容

  • 来源:NumPy Tutorial - TutorialsPoint 译者:飞龙 协议:CC BY-NC-SA 4...
    布客飞龙阅读 32,828评论 6 97
  • 1. numpy简单介绍 numpy 是采用c语言编写,相对python自带的list数组,好处是采用的矩阵运算,...
    淘码小工阅读 1,230评论 0 1
  • qq:875880047 NumPy简介 • 官网链接:http://www.numpy.org/ • NumPy...
    d76d0c9d2b04阅读 561评论 0 2
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,132评论 0 18
  • 原文链接:http://blackblog.tech/2018/02/07/NumPyQuickStart/ 更多...
    BlackBlog__阅读 2,170评论 2 10