机器学习入门笔记一 numpy入门之常用基础方法

上一篇主要介绍了numpy的索引方法,这一篇介绍一些常用的方法。、

常见计算方法

import numpy as np
matrix = np.array([
                    [5, 10, 15], 
                    [20, 25, 30],
                    [35, 40, 45]
                 ])

#一些常见的计算方法:sum(),min(),max(),mean(),std(),sqrt(),exp()
#使用时直接调用就行了,注意axis这个参数,axis = 1表示对行计算,axis = 0对列计算
print("#求和")
print("按行",matrix.sum(axis = 1))
print("按列",matrix.sum(axis = 0))
print('-----------------')
print("#求均值和方差")
print(matrix.mean(axis = 1))
print(matrix.std(axis = 1))
print('-----------------')
print("#求最大最小值")
print(matrix.max(axis = 1))
print(matrix.min(axis = 1))
#求和
按行 [ 30  75 120]
按列 [60 75 90]
-----------------
#求均值和方差
[10. 25. 40.]
[4.0824829 4.0824829 4.0824829]
-----------------
#求最大最小值
[15 30 45]
[ 5 20 35]

指定维度

np.arange(n,m,i)函数生成一个以n开始,m结束,步长为i的array

#指定维度,np.reshape()
array = np.arange(8)      #np.arange(n,m,i)函数生成一个以n开始,m结束,步长为i的array
print(array)

print(array.reshape(2,4))  #变为2*4的矩阵了


[0 1 2 3 4 5 6 7]
[[0 1 2 3]
 [4 5 6 7]]

指定均分成几块

np.linspace(n,m,i),这个函数生成一个以n开始,m结束,均分为i份的array

# np.linspace(n,m,i),这个函数生成一个以n开始,m结束,均分为i份的array
print(np.linspace(0,9,10))
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

求对数和开方

np.exp() 返回自然对数以常数e为底数的对数
np.sqrt() 就是对数进行开方

# 求对数和开方
print("原数",matrix[:,0])
print("对数",np.exp(matrix[:,0]))    #自然对数以常数e为底数的对数
print("开方",np.sqrt(matrix[:,0]))
原数 [ 5 20 35]
对数 [1.48413159e+02 4.85165195e+08 1.58601345e+15]
开方 [2.23606798 4.47213595 5.91607978]

取整方法

np.floor() 向下取整;
np.ceil() 向上取整;
np.trunc() 取整数部分;
np.rint() 四舍五入取整。

# 取整方法: np.floor()向下取整; np.ceil() 向上取整; np.trunc() 取整数部分;   np.rint()  四舍五入取整。
array = np.random.normal(5,5,5)   
#这个方法从正态分布中抽取随机数,第一个参数是分布的平均值,第二个是标准偏差,第三个是样本大小
print(array)
print("向下取整",np.floor(array))
print("向上取整",np.ceil(array))
print("取整数部分",np.trunc(array))
print("四舍五入取整",np.rint(array))
[ 9.95119225 -2.00380924  5.05684191  2.26461747 -4.45758977]
向下取整 [ 9. -3.  5.  2. -5.]
向上取整 [10. -2.  6.  3. -4.]
取整数部分 [ 9. -2.  5.  2. -4.]
四舍五入取整 [10. -2.  5.  2. -4.]

将矩阵拉平

np.ravel() 其实就是将矩阵按顺序变为一个一维矩阵

#ravel() 方法可以将矩阵拉平
matrix = np.array([
                    [5, 10, 15], 
                    [20, 25, 30],
                    [35, 40, 45]
                 ])
print(matrix.ravel())
[ 5 10 15 20 25 30 35 40 45]

矩阵拼接

np.hstack() 横向拼接
np.vstack() 纵向拼接
np.stack() 需要指定axis,而且会增加一个维度

#矩阵拼接
mat1 =  np.array([
                    [5, 10], 
                    [15, 20],
                 ])
mat2 =  np.array([
                    [50, 100], 
                    [150, 200],
                 ])

new_mat1 = np.hstack((mat1,mat2))   #横向拼接
new_mat2 = np.vstack((mat1,mat2))   #纵向拼接
print(new_mat1)
print('---------------')
print(new_mat2)

#np.stack()方法也可拼接矩阵,但是会增加一个维度,同时需要指定axis
new_mat3 = np.stack((mat1,mat2),axis = 1)   

print('---------------')
print(new_mat3)
 [ 15  20 150 200]]
---------------
[[  5  10]
 [ 15  20]
 [ 50 100]
 [150 200]]
---------------
[[[  5  10]
  [ 50 100]]

 [[ 15  20]
  [150 200]]]

矩阵分割

np.hsplit() 横向拼接
np.vsplit() 纵向拼接
np.split() 需要指定axis,默认是0

#切分矩阵
matrix = np.array([
                    [5, 10, 15], 
                    [20, 25, 30],
                    [35, 40, 45]
                 ])

print(np.hsplit(matrix,3))  #纵向切分    要注意维度要和你的矩阵一致,不然会报错
print('----------------------------------------------')
print(np.vsplit(matrix,3))  #横向切分

print(np.split(matrix,3,axis = 1))   #也可直接split(),但要指定axis,默认是0
[array([[ 5],
       [20],
       [35]]), array([[10],
       [25],
       [40]]), array([[15],
       [30],
       [45]])]
----------------------------------------------
[array([[ 5, 10, 15]]), array([[20, 25, 30]]), array([[35, 40, 45]])]
Out[75]:
[array([[ 5],
        [20],
        [35]]), array([[10],
        [25],
        [40]]), array([[15],
        [30],
        [45]])]

返回最大最小值索引

np.argmax() 不指定axis时会默认算整个矩阵的最大值索引(不过这个索引是拉平后的,需要是可以先ravel一下),指定后按行或按列求,对于argmin()也一样。
np.argmin()

# 返回最大最小值索引
matrix = np.array([
                    [15, 50, 10], 
                    [20, 40, 30],
                    [35, 5, 45]
                 ])
MAX_index = np.argmax(matrix) 
max_index = np.argmax(matrix,axis = 0)    
#不指定axis时会默认算整个矩阵的最大值索引(不过这个索引是拉平后的,需要是可以先ravel一下),指定后按行或按列求。
min_index = np.argmin(matrix,axis = 0) 
print(MAX_index)
print(max_index)
print(min_index)
1
[2 0 2]
[0 2 0]

排序

np.sort() 可指定按行或按列排序。
np.argsort() 可得到排序索引。

# 排序
matrix = np.array([
                    [15, 50, 10], 
                    [20, 40, 30],
                    [35, 5, 45]
                 ])
sorted_matrix = np.sort(matrix,axis = 1)  #可指定按行或按列排序
print(sorted_matrix)

print(np.argsort(matrix))    #可得到排序索引
[[10 15 50]
 [20 30 40]
 [ 5 35 45]]
[[2 0 1]
 [0 2 1]
 [1 0 2]]

扩展矩阵

np.tile(matrix,(n,m)) 将matrix复制n*m倍

#复制扩展矩阵
mat =  np.array([
                    [5, 10], 
                    [15, 20],
                 ])
np.tile(mat,(2,2))  #扩展为原数2*2的矩阵
array([[ 5, 10,  5, 10],
       [15, 20, 15, 20],
       [ 5, 10,  5, 10],
       [15, 20, 15, 20]])

矩阵乘法

A * B 如果是array结构,就是各自对应相乘,如果是矩阵结构,就是矩阵乘法。
A.multiply(A,B) 对应各自相乘。
A.dot(B) = np.dot(A,B) 矩阵乘法。

#矩阵乘法
A = np.array( [[1,0],
               [0,1]] )
B = np.array( [[3,3],
               [3,3]] )

print("------------------当A,B为array时---------------------")
#当A,B为array时
print("*乘\n",A*B)     # 此处对应相乘
print("np.multiply\n",np.multiply(A,B)) #对应相乘
# 以下两个方法都是矩阵乘法 
print("np.dot\n",A.dot(B))  
print(np.dot(A, B))
print("------------------当A,B为matrix时---------------------")
#当A,B为matrix时,以下所有乘法都是矩阵乘法
A = np.mat(A)
B = np.mat(B)
print("*乘\n",A*B)       #此处矩阵乘法
print("np.multipl\n",np.multiply(A,B))  #对应相乘
print("np.dot\n",A.dot(B))  
print(np.dot(A, B))
------------------当A,B为array时---------------------
*乘
 [[3 0]
 [0 3]]
np.multiply
 [[3 0]
 [0 3]]
np.dot
 [[3 3]
 [3 3]]
[[3 3]
 [3 3]]
------------------当A,B为matrix时---------------------
*乘
 [[3 3]
 [3 3]]
np.multipl
 [[3 0]
 [0 3]]
np.dot
 [[3 3]
 [3 3]]
[[3 3]
 [3 3]]

至此,numpy的学习暂时告一段落,因为我觉得目前实用的一些基本方法都在这里了,以后遇到一些新方法也会加入进来的。这些方法也不用死记硬背,真正需要用到时可以查文档的。
下一篇开始学习pandas了。

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

推荐阅读更多精彩内容

  • import numpy as np 创建ndarray data1 = [6,7.5, 8, 0, 1]arr1...
    陆文斌阅读 599评论 0 1
  • Numpy是Python的第第三方模块,用于科学计算。 1.属性 列表转化为数组: 2. array的创建 指定数...
    井底蛙蛙呱呱呱阅读 3,294评论 0 10
  • 前言 numpy是支持 Python语言的数值计算扩充库,其拥有强大的高维度数组处理与矩阵运算能力。除此之外,nu...
    TensorFlow开发者阅读 3,152评论 0 35
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,054评论 0 18
  • ListView组件用于显示一个列表,在基于Flutter的开源中国客户端App中,新闻列表、动弹列表等都需要用到...
    彡廿阅读 771评论 0 1