python-3 numpy

numpy 是python科学计算的核心库,当然也涉及pandas和sklearn(基于numpy继续二次开发的包)功能很强大,和matplotlib、scripy一起相当于matlab的作用。

主要内容:

1.数组的定义和应用
2.数组元素的索引选取
3.数组的计算
4.线性代数的运行计算

1.1 Arrays

*用于存储同类型的数据(int、float、String。。)
*能够被非负整数进行索引,维度的数量就是array的秩(rank)。
*可以通过python列表创建array并且通过方括号进行索引获取元素。

import numpy as np
import pandas as pd
a=np.array([1,2,4,6,5])   #创建一维数组
b=np.array([[1,2,3,4],[5,6,7,8]]) # 创建二维数组
1.2 创建Array

numpy 提供内置函数创建一些特殊数据

np.zeros(3) #创建含有三个0元素的数组
array([0., 0., 0.])

np.ones([3,5])
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

np.zeros_like(b) #构建一个0元素组成的数组,结构同b

array([[0, 0, 0, 0],
       [0, 0, 0, 0]])
1.3 数组常用操作

统计计算;
排序;
按照大小索引;
条件查找;
shape

a=np.random.rand(4) #(0,1)随机的一维数组
a=np.random.rand(2,4) # (0,1)二维四列随机的一维数组

np.sum(a) #所有数组元素求和

a.size #元素个数

np.sum(a,axis=1)  # 求每一行的和  ,axis控制行列
array([2.91248016, 1.91076292])
np.sum(a,axis=0)  #求每一列的和
array([1.09794586, 1.4410147 , 0.92824889, 1.35603364])

a.sum(axis=0) #另一个每一列求和的方式

np.argmax(a)  # 返回a中最大元素的位置
3

a.argsort()   #返回每一行的排列顺序,返回顺序索引
array([[1, 2, 0, 3],
       [2, 0, 3, 1]])

np.where(a>0.5) # 返回a中>0.5的元素位置
(array([0, 0, 1, 1, 1, 1, 2, 2, 2]), 
array([1, 2, 0, 1, 2, 3, 0, 1, 2]))

这里是指,0行1列,0行2列,1行0列…..的位置

np.where(a>0.5,1,0) # a中>5的元素位置,满足返回1,不满足返回-1
array([0, 0, 0, 1, 1, 1])
1.4 改变数组形状
b.ravel()  # 同faltten,都是将多维数组降为一维,flatten返回一份新的数组,且对它做修改不会影响原始数组
array([2, 3, 5, 6, 7, 8])

a.reshape(2,4)  #reshape,重新按照指定结构构造数组(8个元素,可以重构为2维4列)
array([[0.78793172, 0.51796296, 0.66614991, 0.94043558],
       [0.31001414, 0.92305174, 0.26209898, 0.41559806]])

a.reshape(4,-1)  #第二个参数位置设置为-1对时候,会自动根据第一参数(已指定)分配维度。
array([[0.78793172, 0.51796296],
       [0.66614991, 0.94043558],
       [0.31001414, 0.92305174],
       [0.26209898, 0.41559806]])

a.reshape(2,-1)
array([[0.78793172, 0.51796296, 0.66614991, 0.94043558],
       [0.31001414, 0.92305174, 0.26209898, 0.41559806]])
1.5 随机数

常用方法:

rand(a,b...) 返回(0,1)指定维度的随机数
randn(a,b,...) 返回标准正态分布的随机数 randint([low,high,size,dtype])
random([size]) 返回(0,1)之间的随机数
sample([size]) 返回(0,1)之间的随机数
choice(a,[size,replace,p]) 从指定元素中选择,产生size大小的数组。

np.random.rand(2,10) #
np.random.randint(1,10,5,'int')  # 返回(1,10)的随机整数,维度上1维5列  

np.random.randint(1,10,(2,5),'int')  # 返回(1,10)的随机整数,维度是2维5列
array([[9, 6, 2, 9, 8],
       [8, 7, 9, 9, 6]])

np.random.choice(100,(3,4))  # 在(0,100)之间随机抽取元素,产生一个3行4列的数组
array([[29, 72, 32, 11],
       [52, 47, 90,  5],
       [79, 10, 80, 92]])

np.random.choice([22,55,11,33,44],(3,4)) #  从指定元素(11,22,33,44,55)中随机抽取,产生一个3行4列的数组
1.6 数组的索引
 a=np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6]]) 
array([[1, 2, 3, 4],
       [2, 3, 4, 5],
       [3, 4, 5, 6]])

a[0:3,0:1]  #0~3行,不包含3,0~1列,不包含1。选择交叉的位置元素
array([[1],
       [2],
       [3]])

整数索引

a[[1,2],[0,1]]   #第一行,第0列:2;第2行,第1列: 4
array([2, 4])

布尔型索引

a>1
a[a>2] #返回>2的所有元素
array([3, 4, 3, 4, 5, 3, 4, 5, 6])
a>3 #返回a>3元素的布尔值,
array([[False, False, False,  True],
       [False, False,  True,  True],
       [False,  True,  True,  True]])

a[2::2,::2]   # 第一参数位置:从第二行开始,每次间隔步长为2;第二参数位置:列从第0列开始,每次间隔步长为2.选择元素。
array([[3, 5]])

a[1::2,::1]  # 相当于选择第一行所有元素
array([[2, 3, 4, 5]])

np.random.randint(0,55,[6,6])
array([[29, 53, 53,  5, 42, 22],
       [52, 39, 21, 21,  3, 31],
       [35, 49, 43, 44, 26, 11],
       [43, 31, 54, 50,  5, 22],
       [29, 31, 26, 20, 37,  5],
       [20, 12, 33, 19, 10, 23]])
1.7 数组数学

元素计算,并不是矩阵计算

a=np.random.randn(3,4)
a/2
b=np.random.randn(3,4)
a+b

array([[ 1.04139689,  0.58922263, -1.38069406, -0.71404626],
       [ 0.74035989, -0.90304504,  2.44278733,  0.76996179],
       [-1.31952622,  1.01089772, -1.29547704,  1.71909875]])

一些常用计算:

np.mod(a,b)  a除b求余
np.divide(a,b) 
np.multiply(a,b)
np.subtract(a,b) 

矩阵点乘:np.dot( a,b ) a结构是m * n,b结构是n*q (矩阵的运算)

np.dot(b,[1,2,3,4]) 
array([0.10503481, 1.68123209, 4.52536127])

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