定义np数据类型的方法,数组基础、数组计算-通用函数 - 草稿 - 草稿

通过字符串参数来指定

np. zeros(10,dtype="int16")

通过numpy对象来指定

no. zeros(10,dtype=no.int16)

数组的一些通俗说法

属性:

数组的纬度,ar. ndim

数组每个纬度的大小,ar. shape

数组的总大小,ar. size

数组的类型,at.dtype

数组每个元素字节大小,at. itemsize

数组总字节大小,at. nbytes,等于上两个乘积

numpy数组是固定类型的,如果将一个浮点型值插入一个整型数组时,浮点值会被截断成整型。不会有警告。

数组切片:获取子数组slice

获取数组内单个元素的方法:ar[1]

用切片来获取子数组,与python切片语法一样

x[start,stop,step] 默认值为[0,整个size,1]

多维数组:[行,列]行列就是一维数组的方式


多维数组,切片为子数组

获取数组,单行单列的方法

列ar[:,1]行ar[1,:],行可以省略为ar[1]

:切片返回的是,数组数据的,视图。而不是数值数据的副本。视图的意思,就是就算你把切片结果的子数组赋值给一个变量了,但是这个变量指向还是原来的数据,修改这个变量,原始数据也会被修改。

创建副本,就用ar. copy(),这时,修改子数组,就不会把原数据更改掉。

ar. reshape((x,y))返回的也是非副本视图,指向同一组数据。


图片发自简书App


索引定位,和切片区别

解释:二维数组里面,[1,1]的话,就是,最外层index为1的数组,然后,在这个数组内再选择index为1的元素。[1,:1]就是在被选择后的数组内,就行切片,切片是从0开始,前闭后开,切出来的是index为0的元素形成的新数组。也就是说没有:的时候,选择的是元素,有:的时候,切出来的是一个子数组。

如果只是修改元素值,不用切片,直接用元素的索引。本图片用的是1比较特殊。所以会出现好像都选的是元素的错觉。

将一个一纬数组变形为,二维的行或者列的矩阵。


一维数组变形为矩阵

从上图可以看到,二维数组,就是一个矩阵。特别是从转换成列矩阵的时候,加了逗号。


矩阵的定义

数组的分裂

x=[1,2,3,99,99,3,2,1]

x1,x2,x3=np. split(x,[3,5])

切片都不包含后面的

slice 切成片  split使分解

雷同vsplit和hsplit

Numpy数组计算:通用函数

使Numpy变快的关键是利用向量化操作。

用seed(x)x可以为0到任何整数,设置np. random. seed(x)以后,下面每一次执行随机生成的值都是一样,并且x设置为任何数,得到随机生成的值都是一样的。参看seed(0)和seed(500)的结果。

另外我想这样设置的目的是:在生成一笔数据的时候,我们可以用randint()这个函数,不用手打,此时我们得到的是随机产生的一组数据。

设置seed()之后呢,这个随机产生的数据相当于固定了。这样如果后面的程序要验证同一组数据的一些结果,就可以直接拿来用。每次导进来的数据都是一样的,且这组数据是随机产生的。

seed()函数


seed(500)


seed(0)

empty()创建的是没有意义的空置。生成的值是随机的。

np. empty(x)/np.empty([x,y])

测试代码运行时间,%timeit 代码

NumPy通用函数

通用函数有两种存在形式:一元通用函数,二元通用函数。一元通用函数是,对单个输入操作。二元通用函数是对两个输入进行操作。

1、数组的运算。利用了python的原生运算符,标准的,加减乘除都可以用。及,逻辑非,指数**,模(余数)运算符%,地板除法运算符//,。都是一元通用函数。

2、绝对值。Python绝对值abs(x)。对应Numpy通用函数是np. absolute(x),也可以用别名,np. abs(x)

复数的幅度:复数的实部和虚部平方和再开方

复数的幅度

3、三角函数


求三角函数

180度=pi


求逆三角函数

4、指数和对数运算


指数运算

exp(x)指e的x次幂

exp2(x)指2的x次幂

power(3,x)指3的x次幂


对数运算

5、专用通用函数

from scipy import special 包含了,很全的通用数学函数运算,包括统计学很多的运算。搜索,gamma function python

2.3.4高级的通用函数特性

1.指定输出

在进行大量运算的时候,指定一个存放运算结果的的数组是非常有用的。所有的通用函数都可以用out 参数来指定计算结果的存放位置。

第一种,直接复制。占用大量内存。

直接设置变量储存
打印结果

第二种,使用out参数储存。内存占用较小。

out参数


out结果

注意:第一种用的empty(),生成的数组内元素是科学记数法,第二种用的zeros(),生成的数组内元素,是float型。

如果不需要调格,直接out=y

2.聚合

二元通用函数,有聚合功能。比如,一样用一个,特定的运算,reduce,一个数组。可以对任何一个通用函数调用reduce()方法。一个reduce方法,会对给定的元素和操作,重复执行,直到得到单个结果。

例如,对add函数,调用reduce方法,,会返回数组中所有元素的和。

x = np. arange(1,6)

np. add. reduce(x)

#结果是15

如果需要存储每次计算的中间结果,使用accumulate

np. add.accumulate(x)

#结果是[1,3,6,10,15]

3.外积

任何通用函数,可以用outet方法,获取不同数组的,所有元素,对函数运算的,结果。

x=np. arange(1,6)

np. multiply.outer(x,x)


outer()方法的结果:乘法表

广播

通用函数另一个非常有用的特性,是它能操作不同大小和形状数组。一组这样的操作,被称为:广播。

通用函数更多的信息可以在,www.numpy.org和www.scipy.org找到

2.4聚合

最大值,最小值,其他值

数组值求合,sum(ar)/np.sum(ar)是在编译码中进行,更快。

最大值max(ar)最小值min(ar),np中也有对应的,且更快。

np中,可以直接调用。ar. min()

1.多纬度聚合。使用参数axis=1/0参数

ar. min(axis=0)。axis关键字,指定的是数组将会被折叠的纬度,axis=0表示,在水平方向上折叠。也意味着每一列的值都将被聚合。

np. percentile(ar,25)四分之一位

np. percentile(ar)中位数

np. percentile(ar,75)四分之三位

2.5数组的计算:广播

向量化操作:1、通过Numpy通用函数。减少python循环2、利用Numpy广播功能。

广播:简单理解为,用于不同大小数组的,二进制通用函数(加,减,乘等)的一组规则。

对于同样大小的数组,二进制的操作是对相应的元素进行逐个计算。

广播允许这些二进制操作可以用于不同大小的数组。例如,可以简单地将一个标量(可以看成一个0维的数组),和一个数组相加。

a=[0,1,2]

print(a+5)

#[5,6,7]可以理解为,将数值5扩展或重复至数组[5,5,5]进行加法操作。实际上这个重复并没有发生。不占用计算。

实际上广播就是,扩展,把要操作的两个数组,扩展到相同的纬度,两个形状一致后,进行运算。


一维数组加二维数组

这里这个一维数组就被扩展或者,广播了。

[[0,1,2],

[0,1,2],

[0,1,2]]然后再对应相加。


双向扩展

[[0,1,2],

[0,1,2],

[0,1,2]]加上

[[0,0,0],

[1,1,1],

[2,2,2]]

这里就将两个数组都扩展成一个公共的形状。


广播可视化理解

广播的规则


图片发自简书App
图片发自简书App

广播就是,维度的匹配。


不匹配规则的广播

广播的规则,对于任意二进制通用函数都是适用的。


数组归一化

可视化时:

plt. hist(ar,30)#30指的是分组数

对数组进行,大于小于等于不等于大于等于小于等于,某个值,都会的到一个布尔型数据组成的数组。

操作布尔数组

np. random. RandonState(0)和np. random. seed(0)两种确定随机数的区别

numpy.random.RandomState()或者numpy.random.RandomState(seed=None)

每次生成数字不一样。

numpy.random.RandomState(1)或者numpy.random.RandomState(seed=1)

每次生成的数字一样。1,2仅仅是来源于1号种子,还是2号种子

存在一个数组,ar

np. count_nonzero(ar<6)。得到,ar<6这个布尔数组,里面 true的个数。

np. sum(ar<6)#得到和上面一样的结果,并且,sum和其他聚合函数一样,可以沿着行或者列进行。

np. sum(ar<6,axis=1)#每一行小于6的个数

要快速检查任意np.any(ar>6),或者全部np. all(ar>6)都是返回一个值。也都可以用axis设置特定坐标轴。np. any(x>6,axis=1)沿着横轴。

axis=0/1详解

2.布尔运算符。逐位逻辑运算符(也叫逻辑运算符)(&、|、^、~),来进行,逐位运算(通常是布尔运算)


逻辑运算符


逻辑异或,真值表

异或XOR ,在英文里面的定义为either one (is one), but not both, 也即只有一个为真(1)时,取真(1)

跟或的区别是,1 or 1 结果为true


将布尔数组作为掩码

ar#数组

ar>5#得到布尔数组

ar[ar>5]#掩码操作,将符合条件的选择出来

ar>5的数组就相当于一个掩码数组。

关键字and/or 逻辑操作运算符&及  | 区别

and和or判断的是两个对象,每个对象,它整个对象是真还是假表达式操作的是整个对象,把这个对象当做布尔实体,非0都是true。

&和|判断的是,两个对象,每个对象,它的比特位。表达式操作的是元素的比特,将and和or运用于,组成改元素的每个比特。


bin()函数

上图用&和|进行运算时,对应的二进制比特位进行比较,以得到最终结果。

Python中的bin()方法的作用:

是将整型转换为二进制数组成的字符串,注意它的结果是个字符串,且转换后的最高位非零(如bin(1)=‘0b1’,而非‘0b01’),并在前面加上0b,表示这是一个二进制。

当对两个布尔型数组进行操作的时候,用|和&,如果用and或or就会出错。

因为,and和or对整个对象执行单个布尔运算,而&和I对一个对象的内容(单个比特或字节)执行多个布尔运算。

其他索引类型


索引的五种方式(花哨索引)


组合索引

np.random.randint(a,size=None,replace=True,p=None)

a,是从哪里选

size是选择的个数

replace为true的意思是,size设置为任意正值,false的意思是,size的值不能比原来a的长度len(a)大。

#在(0,5)区间内生成含5个数据的一维数组

>>a = np.random.randint(0, 5, (5,))

>>print('a = ', a)

    a =  [2 1 2 1 3]

#在a数组中抽取6个数,replace为true

>>b = np.random.choice(a, 6)

>>print('b = ', b)

    b =  [1 1 2 2 1]

#replace为False时,size需小于等于len(a)

>>c = np.random.choice(a, 5, replace=False, p=None)

>>print('c = ', c)

    c =  [3 2 1 1 2]

#p是数组a中所有数出现的概率,总和为1

>>d = np.random.choice(a, 5, replace=False, p=[0.2, 0.3, 0.1, 0.3, 0.1])

>>print('d = ', d)

    d =  [1 3 2 1 2]


np.savetxt('ceshi.txt',ar,fmt = '%0f',delimiter=',')

#数字格式化  https://www.runoob.com/python/att-string-format.html


np.newaxis终极解释 关于理解,数据科学手册,第42页,还有广播的部分,及79页相临点进行求距离的部分。

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