Numpy

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。


ndarray对象

    ndarray 对象是用于存放同类型元素的多维数组。

  • ndarray存储连续相同类型的数据,方便运算查找
  • ndarray支持并行化运算
  • 底层由C语言实现,无GIL限制,支持多线程

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

image.png
import numpy as np 
a = np.array([1,2,3])  
print (a)

#输出
[1, 2, 3]

ndarray属性

常用的就是形状和类型,可以在创建数组时指定data1 = np.array(shape=(2,3), dtype= float)

image.png

基本操作

1. 生成数组

image.png

I. 生成0的数组
numpy.zeros(shape, dtype = float, order = 'C')

II. 生成1的数组
numpy.ones(shape, dtype = None, order = 'C')

III. 从现有数组生成

  • np.copy()
  • np.asarray()
  • np.array()
  • copyarray是浅拷贝,asarray是深拷贝

IV. 生成固定范围的数组

  • np.linspace(a,b,c)——生成[a,b]间的c个数
  • np.arange(a,b,c)——生成[a,b)中步长为c的数

V. 生成随机数

  • 均匀分布(每组可能性相等[low,high),size为输出样本数,元组/int类型) —— np.random.uniform(low,high,size)

  • 正态分布(波动程度、集中程度、稳定性等) —— np.random.normal(low,high,size)

2. 切片索引

这个类似python列表的索引和切片操作,可自行尝试研究

import numpy as np
 
a = np.arange(10)  
b = a[2:7:2]   # 从索引 2 开始到索引 7 停止,间隔为 2
print(b)

#输出
[2,4,6]

3. 形状修改

I. ndarray.reshape(shape)返回一个新的ndarray,但是不是行列直接转换,自动计算:ndarray.reshape(-1,b)
II. ndarray.resize(shape)无返回值,直接更改原型
III. ndarray.T,转置,行变成列,列变成行

4. 类型修改

I. ndarray.astype(type)
II. ndarray.tostring()序列化到本地

5. 数组去重

I. np.unique(array)
II. set操作,先用flatten()将多维数组转成一维再用set操作


运算

1. 逻辑运算

  • 布尔索引

将boolean值作为参数用作条件判断

stock_change = np.random.normal(0, 1, (8, 10))
    stock_change = stock_change[0:5, 0:5]
    #逻辑判断,如果大于0.5则标记为True,否则为False
    print(stock_change >0.5)
    print("******************************")

    #BOOLEAN赋值,将满足条件的设置指定值
    stock_change[stock_change > 0.5] = 1
    print(stock_change)


#输出

[[False  True False False False]
 [False False False False False]
 [False False False  True False]
 [ True False  True False  True]
 [False  True  True  True False]]
******************************
[[-0.6644082   1.          0.12243582  0.09599675  0.0798174 ]
 [-2.62284685 -0.59904615 -0.27598282  0.20408988  0.37416402]
 [-1.2548002   0.04883909 -0.69198354  1.          0.05396606]
 [ 1.          0.26810907  1.         -1.08110028  1.        ]
 [ 0.07104746  1.          1.          1.          0.0382673 ]]
  • 通用判断函数

I. np.all(),条件都满足则返回True,否则False

np.all(stock_change[0:2, 0:5]>0 )

#输出
False

II. np.or(),一个条件满足则返回True,全为False才返回False

np.or(stock_change[0:2, 0:5]>0 )

#输出
True
  • 三元运算符np.where(a,b,c)

a为条件(一组布尔值),b为返回True设置的值,c为返回False设置的值

np.where(array>0,1,0)
  • 复合逻辑需要结合np.logical_and和np.logical_or使用
np.where(np.logical_and(array>0,array<2),1,0)

np.where(np.logical_or(array>0,array<2),1,0)

2. 统计运算

统计指标, min、max、mean(平均值)、median(中位数)、var(方差)、std(标准差)

I. np.argmax()最大数所在位置

  • 注意是按行还是按列,指定axis轴——np.argmax(array, axis=1)

II. 数组间运算

  • 数组与数——直接对组内进行运算,不同于python列表的运算

III. 数组与数组

并非任意数组间都能直接进行运算,需要满足广播机制

IV. 广播机制

当操作两个数组时,numpy会逐个比较它们的shape(构成的元组tuple),只有满足以下条件的数组间才能够进行运算:

  • 维度相等
  • shape(其中相对应的一个地方为1)

将两个矩阵从右向左依次排开(数字为每个维度所含元素个数),按照如上条件判断,最终运算后的shape结果值取对应值的较大值。

可运算:

image.png

不可运算:

image.png

3. 矩阵运算

矩阵(matrix),必须是二维的,但array不同,array可为多维

I. 二维数组
np.mat()——将数组转化为矩阵

    array = np.array([[10,20],[20,30],[30,40]])
    print(type(array))
    print("************")
    mat = np.mat(array)
    print(type(mat))

#输出
<class 'numpy.ndarray'>
************
<class 'numpy.matrixlib.defmatrix.matrix'>
  

II. 矩阵相乘

需要满足以下两点

  • 第一个矩阵的列数=第二个矩阵的行数,形成:(m,n)*(n,l) = (m,l)

  • 运算规则:

    SKX935RWX3ECSXA1VAVGG~Q.png
  • 矩阵乘法api
    • matmul
    • np,dot
    • mat形式矩阵可直接相乘,ndarray形式矩阵需要用上述方法相乘,或者使用array1 @ array2方式

合并与分割

I.合并(axis值不确定的话运行验证一下即可)

  • 水平合并
    • np.hstack((a,b))
    • concatenate((a,b), axis=1)
  • 竖直合并
    • np.vstack((a,b))
    • concatenate((a,b), axis=0)

II. 分割
numpy.split(ary, indices_or_sections, axis=0)

image.png

IO操作

I. numpy读取
np.genfromtxt('1.csv', delimiter=',')

II. 缺失值&NAN
    numpy在处理字符串以及处理缺失值方面不如pandas省事,当读取文本中出现float形式或者有缺失值时会出现NAN,可自行做替换或者其他处理。

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

推荐阅读更多精彩内容