数据科学三基友之Numpy

NumPy是Python语言的一个扩充程序库 ,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 。numpy以及依赖它产生的pandas广泛运用于数据分析和机器学习。

Numpy创建数据:

import numpy as np

list_1  = [1,2,3]
array_1 = np.array([1,2,3],dtype='int')
print(array_1)
>>>[1 2 3]

#多维度
list_2  = [[1,2],[3,4]]
array_2 = np.array(list_2)
print(array_2)
>>>[[1 2]
    [3 4]]

Numpy中的数组和列表有些相似之处 ,数组有多个维度 。dtype为可选参数 ,修饰数组内结构

Numpy创建N维数组的api函数

import numpy as np

array_3 = np.array([1,2,3,4,5,6,7,8,9]).reshape((3,3))
print(array_3)

>>>[[1 2 3]
    [4 5 6]
    [7 8 9]]

array_4 = np.ones([5,5])
print(array_4)

>>>[[1. 1. 1. 1. 1.]
    [1. 1. 1. 1. 1.]
    [1. 1. 1. 1. 1.]
    [1. 1. 1. 1. 1.]
    [1. 1. 1. 1. 1.]]

array_5 = np.zeros([5,5])
print(array_5)

>>>[[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.]]

array_6 = np.random.randint(0,10,(4,3))
print(array_6)

>>>[[3 8 3]
    [1 2 2]
    [1 8 4]
    [1 4 8]]

.reshape可以规定数组的维度 :(m,n)m行n列 。ones填充数组所有元素为1 ,zeros填充数组所有元素为0 。random.randint(0,10,(4,3)) 函数随机生成(0,10)四行三列数组。

Numpy的索引与切片:

array_7 = np.random.randint(0,10,(5,5))
print(array_7)
print(array_7[2,:])  #第三行所有元素
print(array_7[:,2])  #第三列所有元素
print(array_7[2,2])  #第三行第三列的元素

print(array_7[2,1:3])    #第三行的二到三列所有元素
print(array_7[1:3,2])    #第二到三行的三列所有元素
print(array_7[1:3,1:3])  #第二到三行的二到三列所有元素
>>>
[[3 5 9 0 4]       
 [0 3 0 7 9]
 [0 4 3 0 7]
 [9 8 4 0 5]
 [3 0 8 8 5]]

[0 4 3 0 7]
[9 0 3 4 8]
3
[4 3]
[0 3]
[[3 0]
 [4 3]]

Numpy的计算

便于我们更好的理解Numpy的计算 ,这里我们引入一个实例 :四六级成绩 给出一个list ,有四位同学的四六级成绩 。对于四级没过的同学 ,这里的六级成绩我们取0。

取出score的value ,重新组合为新的列表 然后,将数组转为array。

scroe = [{'老王':[444,369]},{'三毛':[333,0]},{'徐四':[578,496]},{'宝儿':[456,425]}]
scroes = []
for x in scroe:

    for key,value in x.items():
        scroes.append(value)
print(scroes)
array_8 = np.array(scroes)
print(array_8)

>>>[[444, 369], [333, 0], [578, 496], [456, 425]]
   [[444 369]
   [333   0]
   [578 496]
   [456 425]]

条件运算:

array_9 = np.array(scroes)
print(array_9>425)                               #返回
print(np.where(array_9 > 425, '合格', '不合格'))  #三目运算

>>>[[ True False]
   [False False]
   [ True  True]
   [ True False]]
  [['合格' '不合格']
   ['不合格' '不合格']
   ['合格' '合格']
   ['合格' '不合格']]

统计运算:

result_max_1 = np.amax(array_9,axis=1)   #行内的最大值      
result_max_2 = np.amax(array_9,axis=0)   #列内的最大值
print(result_max_1)
print(result_max_2)

>>>[444 333 578 456]
   [578 496]

result_min_1 = np.amin(array_9,axis=1)   #行内的最小值      
result_min_2 = np.amin(array_9,axis=0)   #列内的最小值
print(result_min_1)
print(result_min_2)

>>>[369   0 496 425]
   [333   0]

result_mean_1 = np.mean(array_9,axis=1)  #行平均值  一个人四级六级平均成绩
result_mean_2 = np.mean(array_9,axis=0)  #列平均值  四个人四级、六级分别平均成绩
print(result_mean_1)
print(result_mean_2)

>>>[406.5 166.5 537.  440.5]
   [452.75 322.5 ]

result_std_1 = np.std(array_9,axis=1)    #std方差
result_std_2 = np.std(array_9,axis=0)
print(result_std_1)
print(result_std_2)

>>>[ 37.5 166.5  41.   15.5]
   [ 86.76800966 191.55743264]

数组运算:

print("origin array:" ,array_9)
array_9[:,0] = array_9[:,0]+5      #将所有人第一列四级的成绩加五分
print("after the chage:",array_9)

print("origin array:" ,array_9)
array_9[:,1] = array_9[:,1]*0.5      #将所有人第二列六级级的成绩减半
print("after the chage:",array_9)

>>>
origin array:    [[444 369]
                  [333   0]
                  [578 496]
                  [456 425]]
after the chage: [[449 369]
                  [338   0]
                  [583 496]
                  [461 425]]
origin array:    [[449 369]
                  [338   0]
                  [583 496]
                  [461 425]]
after the chage: [[449 184]
                  [338   0]
                  [583 248]
                  [461 212]]

矩阵运算:

np.dot()
规则:(M行, N列) * (N行, Z列) = (M行, Z列)

q = np.array([[0.4], [0.6]])    #array_9四行两列 * q 二行一列 = 四行一列
result = np.dot(array_9, q)
print(result)

>>>[[399. ]
    [133.2]
    [528.8]
    [437.4]]

矩阵合并:

qaaq = [425,425]
array_10 = np.array(qaaq)
print(array_10)
array_11 = np.vstack((array_9,array_10))  #vstack 垂直拼接  hstack水平拼接
print(array_11)

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

推荐阅读更多精彩内容