numpy数组操作

numpy数组操作包括以下几类:

修改数组形状

反转数组

修改数组维度

连接数组

分割数组

数组元素的添加与删除

修改数组形状

函数                   描述

reshape              不改变数据的条件下修改形状

flat                       数组元素迭代器

flatten                  返回一份数组拷贝,对拷贝所做的修改不会影响原始数组

ravel                     返回展开数组

numpy.reshape

numpy.reshape函数可以在不改变数据的条件下改变形状,格式如下:

numpy.reshape(arr,newshape,order='C)

arr:要修改形状的数组

newshape:整数或者整数数组,新的形状应当兼容原有形状

order:‘C’按行,‘A’原顺序,‘k’元素在内存中的出现顺序。

实例:

import numpyas np

a=np.arange(8)

print(a)

b=a.reshape(4,2)

print(b)


numpy.ndarray.flat是一个数组元素迭代器

实例:使用flat属性迭代元素

import numpyas np

a=np.arange(9).reshape(3,3)

for rowin a:

print(row)

#使用flat属性,该属性是一个数组元素迭代器:

for elementin a.flat:

print(element)


numpy.ndarray.flatten

numpy.ndarray.flatten返回一份数组拷贝,对拷贝所做的修改不会影响原始数组,格式如下:

ndarray.flatten(order='C')

参数说明:

order:'C'按行,‘F’按列,‘A’原顺序,‘K’元素在内存中的出现顺序

实例:

import numpyas np

a=np.arange(8).reshape(2,4)

print(a)

print(a.flatten())

print(a.flatten(order='F'))


numpy.ravel

numpy.ravel()展平的数组元素,顺序通常是“C风格”,返回的是数组视图(view,有点类似C/C++引用reference的意味),修改会影响原始数组。

该函数接收两个参数:

numpy.ravel(a,order='C')

参数说明:

order:‘C’按行,‘F’:按列,‘A’原顺序,‘K’:元素在内存中的出现顺序。

实例:ravel应用

import numpyas np

a=np.arange(8).reshape(2,4)

print(a)

b=a.ravel()

print(b)

c=a.ravel(order='F')

print(c)


翻转数组

函数                          描述

transpose                  兑换数组的维度

ndarray.T                   和self.transpose()相同

rollaxis                       向后滚动指定的轴

swapaxes                  兑换数组的两个轴

numpy.transpose

numpy.transpose函数用于兑换数组的维度,格式如下:

numpy.transpose(arr,axes)

参数说明

arr:要操作的数组

axes:整数列表,对应维度,通常所有维度都会对换。

实例:respose应用

import numpyas np

a=np.arange(8).reshape(2,4)

print(a)

print(np.transpose(a))


numpy.ndarray.T和numpy.transpose类似:

实例:numpy.ndarray.T的应用

import numpyas np

a=np.arange(12).reshape(3,4)

print('原始数组:')

print(a)

print('转置数组:')

print(a.T)


numpy.rollaxis

numpy.rollaxis函数向后滚动特定的轴到一个特定位置,格式如下:

numpy.rollaxis(arr,axis,start)

参数说明:

arr:数组

axis:要向后滚动的轴,其它轴的相对位置不会改变

start:默认为0,表示完整的滚动。会滚动到特定位置。

实例:rollaxis的应用

import numpyas np

a=np.arange(8).reshape(2,2,2)

print("原始数组是:")

print(a)

print('调用rollaxis函数:')

print(np.rollaxis(a,2))

print('调用rollaxis函数:')

print(np.rollaxis(a,2,1))


numpy.swapaxes

numpy.swapaxes函数用于交换数组的两个轴,格式如下:

numpy.swapaxes(arr,axs1,axis2)

arr:输入的数组

axis1:对应第一个轴的整数

axis2:对应第二轴的整数

实例:swapaxes的应用

import numpyas np

a=np.arange(8).reshape(2,2,2)

print('原始数组是:')

print(a)

print('调用swapaxes函数后的数组:')

print(np.swapaxes(a,2,0))


修改数组维度

维度                                   描述

broadcast                           产生模仿广播的对象

broadcast_to                      将数组广播到心形状

expand_dims                      扩展数组的形状

squeeze                              从数组的形状中删除一维条目

实例:使用broadcast广播

import numpyas np

x=np.array([[1],[2],[3]])

y=np.array([4,5,6])

b=np.broadcast(x,y)

print('对y广播x:')

r,c=b.iters

print(next(r),next(c))

print(next(r),next(c))

print('广播对象的形状:')

print(b.shape)

#手动使用broadcast将x和y相加

c=np.empty(b.shape)

print('手动使用broadcast将x和y相加:')

print(c.shape)

c.flat=[u+vfor (u,v)in b]

print('调用flat函数:')

print(c)

print('\n')

print('x与y的和:')

print(x+y)



numpy.broadcast_to

numpy.broadcast_to函数将数组广播到新形状。它在原始数组上返回只读视图。它通常不连续。如果新形状不符合numpy的广播规则,该函数可能会抛出valueError。

numpy.broadcast_to(array,shape,subok)

实例:broadcast_to应用

import numpyas np

a=np.arange(4).reshape(1,4)

print('原始数组:')

print(a)

print('调用broadcast_to函数后:')

print(np.broadcast_to(a,(4,4)))


numpy.expand_dims

numpy.expand_dims函数通过在指定位置插入新的轴来扩展数组形状,函数格式如下:

numpy.expand_dims(arr,axis)

参数说明:

arr:输入数组

axis:新轴插入的位置

实例:维度不一插入

import numpyas np

x=np.array(([1,2],[3,4]))

print('数组x:')

print(x)

y=np.expand_dims(x,axis=0)

print('数组y:')

print(y)

print('数组x和数组y的维度:')

print(x.ndim,y.ndim)

print('数组x和数组y的形状:')

print(x.shape,y.shape)

print('在位置1插入轴后的数组y:')

y=np.expand_dims(y,axis=1)

print(y)

print('x的形状和y的形状:')

print(x.shape,y.shape)


numpy.squeeze

numpy.squeeze函数从给定数组的形状中删除一维的条目,函数格式如下:

numpy.squeeze(arr,axis)

参数说明:

arr:输入数组

axis:整数或者整数元组,用于选择形状中一维条目的子集

实例:

import numpyas np

x=np.arange(9).reshape(1,3,3)

print('数组X:')

print(x)

y=np.squeeze(x)

print('数组y:')

print(y)

print('数组x和y的形状:')

print(x.shape,y.shape)

连接数组

函数                             描述

concatenate                 连接沿现有轴的数组序列

stack                             沿着新的轴加入一系列数组

hstack                            水平堆叠序列中的数组(列方向)

vstack                             竖直堆叠序列中的数组(行方向)

numpy.concatenate

numpy.concatenate函数用于沿指定轴连接相同形状的两个或多个数组,格式如下:

numpy.concatenate((a1,a2,...),axis)

参数说明:

a1,a2,...相同类型的数组

axis:沿着它连接数组的轴,默认为0

实例:

import numpyas np

a=np.array([[1,2],[3,4]])

print('数组a:')

print(a)

b=np.array([[5,6],[7,8]])

print('数组b:')

print(b)

print('沿轴0连接两个数组:')

print(np.concatenate((a,b)))

print('沿轴1连接两个数组:')

print(np.concatenate((a,b),axis=1))


numpy.stack

numpy.stack函数用于沿新轴链接数组序列,格式如下:

numpy.stack(arrays,axis)

参数说明:

arrays相同形状的数组序列

axis:返回数组中的轴,输入数组沿着它来堆叠

实例:

import numpyas np

a=np.array([[1,2],[3,4]])

print('数组a:')

print(a)

b=np.array([[5,6],[7,8]])

print('数组b:')

print(b)

print('沿轴0堆叠两个数组:')

print(np.stack((a,b),0))

print('沿轴1堆叠两个数组:')

print(np.stack((a,b),1))


numpy.hstack

numpy.hstack是numpy.stack函数的变体,它通过水平堆叠生成数组。

实例:

import numpyas np

a=np.array([[1,2],[3,4]])

print('第一个数组:')

print(a)

b=np.array([[5,6],[7,8]])

print('第二个数组:')

print(b)

print('水平堆叠:')

c=np.hstack((a,b))

print(c)


numpy.vstack

numpy.vstack是numpy.stack函数的变体,它通过垂直堆叠来生成数组

实例:

import numpyas np

a=np.array([[1,2],[3,4]])

print('数组a:')

print(a)

b=np.array([[5,6],[7,8]])

print('数组b:')

print(b)

print('垂直连接:')

c=np.vstack((a,b))

print(c)


分割数组

函数                        数组及操作

split                         将一个数组分割为多个子数组

hsplit                         将一个数组水平分割为多个子数组(按列)

vsplit                        讲一个数组垂直分割为多个子数组(按行)

numpy.split

numpy.split函数沿特定的轴将数组分割为子数组,格式如下:

numpy.split(ary,indices_or_sections,axis)

参数说明:

ary:被分割的数组

indices_or_sections:果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)

axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分。

实例:

import numpyas np

a=np.arange(9)

print('数组a:')

print(a)

print('将数组分为三个大小相等的子数组:')

b=np.split(a,3)

print(b)

print('将数组在一维数组中标明的位置分割:')

b=np.split(a,[4,7])

print(b)


numpy.hsplit

numpy.hsplit函数用于水平分割数组,通过制定要返回的相同形状的数组数量来拆分原数组。

实例:

import numpyas np

a=np.floor(10*np.random.random((2,6)))

print('数组a:')

print(a)

print('拆分后:')

print(np.hsplit(a,3))


numpy.vsplit

numpy.vsplit沿着垂直轴分割,其分割方式与hsplit用法相同

实例:

import numpyas np

a=np.arange(16).reshape(4,4)

print('数组a:')

print(a)

print('垂直分割:')

b=np.vsplit(a,2)

print(b)


数组元素的添加与删除

函数                  元素及描述

resize                  返回指定形状的新数组

numpy.resize(arr,shape)

参数说明:

arr:要修改大小的数组

shape:返回数组的新形状

实例:

import numpyas np

a=np.array([[1,2,3],[4,5,6]])

print('数组a:')

print(a)

print(a.shape)

b=np.resize(a,(3,2))

print('数组b:')

print(b)

print(b.shape)

b=np.resize(a,(3,3))

print(b)


numpy.append

numpy.append函数在数组的末尾添加值。追加操作会分配整个数组,并把原来的数组赋值到新数组中。此外,输入数组的维度必须匹配否则将生成valueerror。

append函数返回的始终是一个一维数组

numpy.append(arr,values,axis=None)

参数说明:

arr:输入数组

values:要向arr添加的值,需要和arr形状相同(除了要添加的轴)

axis:默认为None。当axis无定义时,是横向加成,返回总是为一维数组,当axis有定义的时候,分别为0和1的时候。当axis有定义的时候,分别为0和1的时候(列数要相同)。当axis为1时,数组是加在右边(行数要相同)

实例:

import numpyas np

a=np.array([[1,2,3],[4,5,6]])

print('第一个数组:')

print(a)

print('向数组添加元素:')

print(np.append(a,[7,8,9]))

print('沿轴0添加元素:')

print(np.append(a,[[7,8,9]],axis=0))

print('沿轴1添加元素:')

print(np.append(a,[[5,5,5],[7,8,9]],axis=1))


numpy.insert

numpy.insert函数在给定索引之前,沿给定轴在输入数组中插入值。

如果值的类型转换为要插入,则它与输入数组不同。插入没有原地,函数会返回一个新数组。此外,如果未提供轴,则输入数组会被展开。

numpy.insert(arr,obj,values,axis)

参数说明:

arr:输入数组

obj:在其之前插入值的索引

values:要插入的值

axis:沿着它插入的轴,如果未提供,则输入数组会被展开

实例:

import numpyas np

a=np.array([[1,2],[3,4],[5,6]])

print('数组a:')

print(a)

print('未传递axis参数。在插入之前输入数组会被展开。')

print(np.insert(a,3,[11,12]))

print('传递了axis参数。会广播数组来配输入数组。')

print('沿轴0广播:')

print(np.insert(a,1,[11],axis=0))

print('沿轴1广播:')

print(np.insert(a,1,11,axis=1))

numpy.delete

numpy.delete函数返回从输入数组中删除指定子数组的新数组。与insert(函数的情况一样,如果未提供轴参数,则输入数组将展开。)

numpy.delete(arr,obj,axis)

arr:输入数组

obj:可以切片,整数或者整数数组,表明要从输入数组删除的子数组

axis:沿着它删除给定子数组的轴,如果未提供,则输入数组会被展开

实例:

import numpyas np

a=np.arange(12).reshape(3,4)

print('数组a:')

print(a)

print('未传递axis参数,在插入之前输入数组会被展开:')

print(np.delete(a,5))

print('删除第二列:')

print(np.delete(a,1,axis=1))

print('包含从数组中删除的替代值的切片:')

a=np.array([1,2,3,4,5,6,7,8,9,10])

print(np.delete(a,np.s_[::2]))


numpy.unique

numpy.unique函数用于去除数组中的重要元素

numpy.unique(arr,return_index,return_inverse,return_counts)

arr:输入数组,如果不是一维数组则会展开

return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式存储

return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式存储

return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数

实例:

import numpyas np

a=np.array([5,2,6,2,7,5,6,8,2,9])

print('数组a:')

print(a)

print('第一次去重:')

u=np.unique(a)

print(u)

print('去重数组的索引数组:')

u,indices=np.unique(a,return_index=True)

print(indices)

print('可以看到每个和原数组下标对应的数值:')

print(a)

print('去重数组的下标:')

u,indices=np.unique(a,return_inverse=True)

print(u)

print('下标为:')

print(indices)

print('使用下标重构原数组:')

print(u[indices])

print('返回去重元素的重复数量:')

u,indices=np.unique(a,return_counts=True)

print(u)

print(indices)


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

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,122评论 0 18
  • import numpy as np 创建ndarray data1 = [6,7.5, 8, 0, 1]arr1...
    陆文斌阅读 641评论 0 1
  • 前言 numpy是支持 Python语言的数值计算扩充库,其拥有强大的高维度数组处理与矩阵运算能力。除此之外,nu...
    TensorFlow开发者阅读 3,210评论 0 35
  • 1 numpy.arange 在给定的区间[start, stop) 内返回均匀间隔的值 语法:numpy.ara...
    foochane阅读 883评论 0 0
  • 数组形状.T / .reshape() / .resize() .T 转置 [0 1 2 3 4 5 6 7 8 ...
    Marshal_Y阅读 416评论 0 0