numpy_learn

numpy

1、numpy中创建结构化数据

import numpy as np
dt = np.dtype([("age",np.int8)])
a = np.array([(10,),(20,),(30,)],dtype=dt)
print(a["age"])

2.numpy的数组属性

属性 说明
ndarray.ndim
ndarray.shape 形状
ndarray.size 元素总个数m*n
ndarray.dtype 元素数据类型
ndarray.itemsize 每个元素的大小,字节为单位
ndarray.flags ndarray对象的内存信息
ndarray.real ndarray元素的实部
ndarray.imag 元素的虚部
ndarray.data 实际数组的缓冲区

例子

#a是read-only
a= np.array([1,2,3])
a.flags.writeble=False

3.np创建数组

  1. np.zeros(shape,dtype=None,order="C")
    示例
b=np.zeros((2,2))#默认为浮点数
a=np.zeros((2,2),dtype=[("x","i4"),("y","i4")])
#array([[(0, 0), (0, 0)],
       [(0, 0), (0, 0)]], dtype=[('x', '<i4'), ('y', '<i4')])
  1. np.ones(shape,dtype,order="F")
  2. np.asarray(a,dtype=None,order=None) a可以是任意形式的输入参数,列表元组,列表的元组,元组的元组,元组的列表,多维数组。
  3. np.frombuffer(buffer,dtype=float,count=-1,offset=0)实现动态数组,以流的形式读入转换成ndarray对象.参数count是读取的数据数量,-1指全部数据;offset指读取的起始位置。
    注意:python3默认str是unicode类型,要在str前加b转换成bytestring类型。
  4. np.fromiter(iterable,dtype,count=-1),从可迭代对象建立ndarray对象。
  5. np.arange(start,stop,step,dtype)
  6. np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)创建等差数列。
  7. np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)创建等比数列,base参数意思是取对数时候log的下标。

4.ndarray数组的切片和索引

  1. slice(start,stop,step) 相当于直接array[2:7:2]
  2. np高级索引(整数数组索引,布尔索引,花式索引)

例一:整数索引

x=np.arange(10).reshape(2,5)
x[[0,1,0,1],[0,1,0,1]]#第一维取行,第二维取列
#array([0, 6, 0, 6])

例二::与...

x[0:1,1:3](左闭右开)
#array([[1, 2]])
x[...,-1:],返回和原二维数组的维度一致
#array([[4],
       [9]])

例三:布尔索引

x[x>5]#返回一维结果
#array([6, 7, 8, 9])

例四:花式索引
花式索引指的是利用整数数组进行索引。
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行。
花式索引跟切片不一样,它总是将数据复制到新数组中

x[[1,0]] 互换第一二行
#array([[5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4]])
传入多个索引数组(np.ix_)
x[np.ix_([1,0],[2,1,3])]#返回2*3维的二维数组
#array([[7, 6, 8],
       [2, 1, 3]])

5 np的broadcast机制

广播的规则:

让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
输出数组的形状是输入数组形状的各个维度上的最大值。
如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

数组拥有相同形状。
当前维度的值相等。
当前维度的值有一个是 1。
a=np.array(1,2,3,4,5)
x+a
#array([[ 1,  3,  5,  7,  9],
       [ 6,  8, 10, 12, 14]])
相当于
x+np.tile(a,(2,1))

6. np迭代数组

np.nditer进行迭代

x=np.arange(6).reshape(2,3)
list(np.nditer(x))默认的是行序有先
#[array(0), array(1), array(2), array(3), array(4), array(5)]
list(np.nditer(x.T))
#[array(0), array(1), array(2), array(3), array(4), array(5)]
a=x.T.copy(order="C")
list(np.nditer(a))
#[array(0), array(3), array(1), array(4), array(2), array(5)]

从上述例子可以看出,a 和 a.T 的遍历顺序是一样的,也就是他们在内存中的存储顺序也是一样的,但是 a.T.copy(order = 'C') 的遍历结果是不同的,那是因为它和前两种的存储方式是不一样的,默认是按行访问。

显示地使用某种顺序

list(np.nditer(x,order="F"))
#[array(0), array(3), array(1), array(4), array(2), array(5)]

外部循环
nditer类的构造器拥有flags参数,

在下面的实例中,迭代器遍历对应于每列,并组合为一维数组。
list(np.nditer(x,flags=["external_loop"],order="F"))
[array([0, 3]), array([1, 4]), array([2, 5])]

广播迭代机制

7. np的数组操作

大致分为几类:

  • 修改数组形状
  • 翻转数组
  • 修改数组维度
  • 链接数组
  • 分割数组
  • 数组元素的添加与删除

修改数组形状

函数 说明
reshape 不改变数据,修改形状
flat 数组元素迭代器
flatten 返回 一份数组拷贝
ravel 返回展开数组

翻转数组

函数 说明
transpose 对换数组的维度
.T 转置
rollaxis 向后滚动指定的轴
swapaxes 对换数组的两个轴

例子

#将轴2滚动到轴0
np.rollaxis(a,2,0)
#原始坐标[1,1,0],转换成[0,1,1]
np.swapaxes(arr,axis1,axis2)#交换轴1和轴2

修改数组维度

函数 说明
broadcast 产生模仿广播的对象
broadcast_to 将数组广播到新形状
expand_dims 扩展数组形状
squeeze 从数组中删除一维条目

链接数组

函数 说明
concatenate 连接沿现有轴的数组序列
stack 沿着新的轴加入一系列数组
hstack 水平堆叠列方向
vstack 竖直堆叠,行方向

注意
np.stack(arrays,axis),arrays相同形状的数组序列,axis返回数组中的轴。用于沿新轴连接数组序列,会新增一个维度。

分割数组

函数 说明
split 将一个数组分割为多个子数组
hsplit 将一个数组水平分割为多个子数组(按列)
vsplit 将一个数组分割为多个子数组(按行)

注意
np.split(arr,indices_or_sections,axis)

a=np.arange(9)
b=np.split(a,[4,7])
#[array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8])]

数组元素的添加和删除

函数 元素及新数组
resize 返回指定形状的新数组
append 将值添加到数组末尾
insert 沿指定轴插入到指定下标之前
delete 删除某个轴的子数组,并返回新数组
unique 查找数组内的唯一元素

例子:
np.insert(arr,object,values,axis)

  • arr被插入数据的数组
  • object插入数据的索引位置
  • values 要插入的值
  • 按照行列进行插入,未指定时在插入之前的数组会被展开。

8. np 的位运算

np的"bitwise_"开头的函数是位运算函数。

函数 说明
bitwise_and 位与操作
bitwise_or 位或操作
invert 按位取反
left_shift 向左移动二进制表示的位
right_shift 向右移动二进制表示的位

9.np的字符串函数

对dtype的numpy.string_或numpy.unicode_的数组执行向量化字符串操作,这些函数在字符数组类numpy.char中定义

函数 说明
np.char.add() 对两个数组的逐个字符串元素进行连接
.multiply() 返回按元素多重连接后的字符串
... python字符类型的一些方法

10. np的数学公式

三角函数,算术运算函数,复数处理函数,
np.sin(),cos(),tan(),arctan(),arcsin(),arccos(),

  • 舍入函数
    np.around(a,decimals)四舍五入
    np.floor()向下取整。
    np.ceil()向上取整。

11. np的排序,条件筛选函数

np.sort(a,axis,kind,order)
kind:默认为"quicksort","mergesort"归并排序,“heapsort”堆排序
np.argsort()返回数组值从小到大的索引值。

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

推荐阅读更多精彩内容

  • [TOC] NumPy numpy 是python语言的一个扩展程序库, 支持大量的维度数组与矩阵运算, 此外也针...
    pigdaqiang阅读 978评论 0 9
  • 0. NumPy的安装 使用Anaconda 访问 https://www.anaconda.com/distri...
    小哲1998阅读 1,512评论 0 16
  • 一、数据的维度 数据维度的python表示 一维数据:列表和集合类型 二维数据:列表类型多维数据:列表类型 高维数...
    MaceJin阅读 833评论 0 2
  • NumPy Ndarray 对象 NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类...
    JackHCC阅读 2,885评论 0 0
  • Numpy 数组 用list和tuple等数据结构表示数组,从列表产生数组 a=array(list),或直接将列...
    Yuri7阅读 681评论 1 0