python学习笔记——Numpy库

Numpy是一个第三方python库,用于科学计算,前身是1995年开始开发的一个用于数组运算的库。

Numpy数组存储在一个均匀连续的内存块中,数组元素遍历所有的元素不需要像python中分散存储的list结构一样,对内存地址进行查找,大大节省内存空间。

1.引用


import numpy as np


2.创建数组

import numpy as npa=np.array([[1,2,3,4],[2,3,5,8],[2,5,6,8]])

b=np.arange(6).reshape(2,3)

print(a)

print(a.shape)

print(b)

print(b.shape)

#结果
[[1 2 3 4]

[2 3 5 8]

[2 5 6 8]]

(3, 4)

[[0 1 2]

[3 4 5]]

(2, 3)


先导入numpy库,记为np,然后a是通过array将序列转换为ndarray对象,b是先通过arange(n)创建一个一维数组然后在使用reshape(a, b)改变维度,变成依次生成n个自然数的a行b列的形式的二维数组。


通过shape属性获得数组大小,通过dtype属性可获得元素属性,size属性可获取数组元素个数,ndim可以获取数组维度。

a=np.array([[1,2,3,4],[2,3,5,8],[2,5,6,8]])

print(a)

print(a.shape)

print(a.size)

print(a.ndim)

print(a.dtype)

# [[1 2 3 4]

#  [2 3 5 8]

#  [2 5 6 8]]

# (3, 4)

# 12

# 2

# int32

arange(初始值,终值,步长)可以创建等差数组的一维数组,默认不包括终值。




·创建填充0的数组:numpy.zeros()-参数表示维数

·创建填充为1的数组:np.ones()

·创建填充初始内容随机数组(取决于内存状态):np.empty((a,b),c)——a为行数,b为列数,c为指定值

·创建对角为1的数组:np.eye()

·创建指定间隔内均匀间隔数字的一维数组:np.linspace(a,b,num=c)——a为起始值,b为结束值,c为数组元素个数

zero = np.zeros((2,4))

print(zero)

one = np.ones((2,4))

print(one)

emp = np.empty((3,3))

print(emp)

ful = np.full((3,4),3)

print(ful)

eyes = np.eye(3,3)

print(eyes)

array = np.linspace(0,10,num=5)

print(array)

[[0. 0. 0. 0.]

[0. 0. 0. 0.]]

[[1. 1. 1. 1.]

[1. 1. 1. 1.]]

[[0.00e+000 0.00e+000 0.00e+000]

[0.00e+000 0.00e+000 3.14e-321]

[0.00e+000 0.00e+000 0.00e+000]]

[[3 3 3 3]

[3 3 3 3]

[3 3 3 3]]

[[1. 0. 0.]

[0. 1. 0.]

[0. 0. 1.]]

[ 0.  2.5  5.  7.5 10. ]


3.random模块:

包含随机数产生合同及分布相关的基本函数。

①随机生成[0,1)范围的数:np.random.random()

②随机生成高斯分布的概率密度随机数:np.random.normal(startvalue,endvalue,(维数))

ran = np.random.random((2,4))

print(ran)

ran1 = np.random.normal(0,10,(2,4))

print(ran1)

[[0.34482091 0.12131755 0.5098051 0.89801917]

[0.00938639 0.68121558 0.21738956 0.92591899]]

[[ 0.97383067 -2.18110761 12.93532422 11.11133372]

[ 3.89121931 -0.09452442  3.84108881 13.25680942]]


4.切片操作

①一维数组:list[(start):(end):(step)]

②二维数组:list[(start1):(stop1):(step1),(start2):(stop2):(step2)]——逗号前面代表行,逗号后面代表列

a=np.full((8,8),0)

print(a)

a[0::2,1::2]=1

print(a)

a[1::2,0::2]=1

print(a)

[[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0]]


[[0 1 0 1 0 1 0 1]

[0 0 0 0 0 0 0 0]

[0 1 0 1 0 1 0 1]

[0 0 0 0 0 0 0 0]

[0 1 0 1 0 1 0 1]

[0 0 0 0 0 0 0 0]

[0 1 0 1 0 1 0 1]

[0 0 0 0 0 0 0 0]]


[[0 1 0 1 0 1 0 1]

[1 0 1 0 1 0 1 0]

[0 1 0 1 0 1 0 1]

[1 0 1 0 1 0 1 0]

[0 1 0 1 0 1 0 1]

[1 0 1 0 1 0 1 0]

[0 1 0 1 0 1 0 1]

[1 0 1 0 1 0 1 0]]


5.数组的统计方法

①对数组中全部或某轴向元素求和:sum

也可以用list.sum(axis=n)——n=0或1,n=0时表示列向相加,n=1时表示横向相加

a=np.arange(0,11,2).reshape(2,3)

print(a)

su=np.sum(a)

s=np.sum(a[0,:])

s1 = np.sum(a[:,1])

s2 = np.sum(a[:,0:2])

print(su)

print(s)

print(s1)

print(s2)

[[ 0 2 4]

[ 6  8 10]]

30

6

10

16


②算数平均数,零长度数组的mean为NaN:mean

a=np.arange(0,11,2).reshape(2,3)

print(a)

mean1=np.mean(a)

print(mean1)


[[ 0 2 4]

[ 6  8 10]]

5.0


③标准差:std

④方差:var

a=np.arange(0,11,2).reshape(2,3)

print(a.std())

print(a.var())


3.415650255319866

11.666666666666666


⑤最大值max;最小值min

a=np.array([1,2,3,4])

print(a.max())

print(a.min())

#4

#1


⑥最大索引argmax;最小索引argmin

a=np.array([1,2,3,4])

print(a.argmax())

print(a.argmin())

3

0


⑦元素的累加cumsum;元素的累积cumprod

返回一个数组,每一个元素是与前一个元素累加的结果

a=np.array([1,2,3,4,5])

print(a.cumsum())

print(a.cumprod())

#[ 1 3 6 10 15]

#[  1  2  6  24 120]




7.线性代数

①向量加减



②矩阵点乘和元素乘积


A=np.arange(4).reshape(2,2)

B=np.arange(2,6).reshape(2,2)

print(A)

print(B)

print(A*B)

print(A.dot(B))


[[0 1]

[2 3]]

[[2 3]

[4 5]]

[[ 0  3]

[ 8 15]]

[[ 4  5]

[16 21]]



③矩阵转置


A=np.arange(6).reshape(2,3)

print(A)

print(A.T)

[[0 1 2]

[3 4 5]]

[[0 3]

[1 4]

[2 5]]


8.np.linalg模块


基本方法

①计算逆矩阵:(矩阵必须是方阵且可逆)设A是数域上一个n阶矩阵,若在相同数域上存在另一个n阶矩阵,使得AB=BA=E,则称为B是A的逆矩阵,而A则称为可逆矩阵。——E是单位矩阵

x=np.lianlg.inv(A)

验证:A*inv=E

判定简单的矩阵不可逆

#计算逆矩阵

a = np.mat("0 1 2;1 0 3;4 -3 8")

#mat可以从字符串或列表中生成;array只能从列表中生成

b = np.array([[0,1,2],[1,0,3],[4,-3,8]])

inv = np.linalg.inv(a)

inv1 = np.linalg.inv(b)

print(a)

print(inv)

print(b)

print(inv1.dot(b))#验证

[[ 0 1 2]

[ 1  0  3]

[ 4 -3  8]]

[[-4.5  7.  -1.5]

[-2.  4.  -1. ]

[ 1.5 -2.  0.5]]

[[ 0  1  2]

[ 1  0  3]

[ 4 -3  8]]

[[1. 0. 0.]

[0. 1. 0.]

[0. 0. 1.]]



②解线性方程组(Ax=b的线性方程)——A是矩阵,x是未知变量,b是一维或二维数组


x=np.linalg.solve(A,a)

验证:np.dot(A,x)=a


A=np.mat("1 -2 1;0 2 -8;-4 5 9")

b=np.array([0,8,-9])

print(A,b)

print(np.linalg.solve(A,b))

print(A.dot(np.linalg.solve(A,b)))

[[ 1 -2 1]

[ 0  2 -8]

[-4  5  9]] [ 0  8 -9]

[29. 16.  3.]

[[ 0. 8. -9.]]



③特征值和特征向量: 

设A是n阶方阵,如果数a和n维非零列向量x使关系式Ax=ax成立,那么这样的数a称为矩阵A特征值,非零向量x称为A的对应于特征值λ的特征向量。Ax=ax也可写成( A-aE)X=0。非零解的充分必要条件是系数行列式| A-aE|=0

A=np.mat("3 -2;1 0")

a=np.linalg.eigvals(A)

print(a)

[2. 1.]


④计算矩阵的Mooer-Penrose伪逆

pinv函数没有只接受方阵作为输入矩阵的限制

np.linalg.pinv(A)

⑤行列式

np.linalg.det(A)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352