Python——ndarray多维数组基本操作(2)

1.数组通用函数(ufunc):

通用函数(ufunc)是在ndarray数组中进行逐元素操作的函数,分为一元函数和二元函数。

  • 一元函数:对ndarray中的数据执行元素级运算的函数
arr = np.arange(6).reshape(2,3)

arr
Out[4]: 
array([[0, 1, 2],
       [3, 4, 5]])

np.sqrt(arr)
Out[5]: 
array([[0.        , 1.        , 1.41421356],
       [1.73205081, 2.        , 2.23606798]])

np.square(arr)
Out[6]: 
array([[ 0,  1,  4],
       [ 9, 16, 25]], dtype=int32)
函数 说明
abs(x) fabs(x) 计算数组各元素的绝对值
sqrt(x) 计算数组各元素的平方根
square(x) 计算数组各元素的平方
log(x) log10(x) log2(x) 计算数组各元素的自然对数、10底对数、2底对数
ceil(x) floor(x) 计算数组各元素的ceiling值或floor值
rint(x) 计算数组各元素的四舍五入值
modf(x) 计算数组各元素的小数和整数部分以两个独立数组形式返回
cos(x) cosh(x) sin(x) sinh(x) tan(x) tanh(x) 计算数组各元素的三角函数
exp(x) 计算数组各元素的指数值
sign(x) 计算数组各元素的符号值,1(+),0,-1(-)
  • 二元函数:接收两个数组并返回一个数组作为结果
arr1 = np.random.randn(6).reshape(2,3)

arr2 = np.random.randn(6).reshape(2,3)

arr1
Out[9]: 
array([[-0.10791009, -1.45209268,  0.14815903],
       [ 0.75679391,  0.17230266, -1.99569305]])

arr2
Out[10]: 
array([[ 0.42214747,  0.1487958 ,  1.80359439],
       [ 0.69593972,  0.13721871, -0.22506674]])

np.maximum(arr1,arr2)
Out[11]: 
array([[ 0.42214747,  0.1487958 ,  1.80359439],
       [ 0.75679391,  0.17230266, -0.22506674]])

arr1 > arr2
Out[12]: 
array([[False, False, False],
       [ True,  True, False]])
函数 说明
+(add)-(subtract)×(multiply)/(divide、floor_divede) 两个数组各元素进行对应加减乘除、整除运算
power(x,y) 将第二个数组的元素作为第一个数组对应元素的幂次方
maximum(x,y) fmax() minimum(x,y) fmin() 元素级的最大值、最小值计算
mod(x,y) 元素级的模运算
copysign(x,y) 将数组y中各元素的符号赋值给数组x对应元素
> < >= <= == != 算术比较,产生布尔型数组
greater(x,y) greater_equal(x,y) less(x,y) less_equal(x,y) equal(x,y) not_equal(x,y) 算术比较,产生布尔型数组,与数学操作符效果一致
logical_and(x,y) logical_or(x,y) logical_xor(x,y) 元素级的逻辑操作,与逻辑操作符`&、 、^`效果一致

2.数组的where()函数:

where()函数是三元表达式x if condition eles y的向量化版本
where()函数的后两个参数可以是标量也可以是数组。where()函数在数据分析中的一个典型用法就是根据一个数组生成一个新的数组。

arr = np.random.randn(3,3)

arr
Out[14]: 
array([[-1.67054537, -1.00228755,  1.60466812],
       [-1.54595476,  0.32293948,  0.22890502],
       [ 0.3178935 , -0.501759  , -0.57045445]])

# 将数组arr中所有正值调换为1,所有负值替换为-1
np.where(arr>0,1,-1)
Out[15]: 
array([[-1, -1,  1],
       [-1,  1,  1],
       [ 1, -1, -1]])

# 后面的参数也可以是标量
np.where(arr>0,1,arr)
Out[16]: 
array([[-1.67054537, -1.00228755,  1.        ],
       [-1.54595476,  1.        ,  1.        ],
       [ 1.        , -0.501759  , -0.57045445]])

3.数组基础统计方法:

arr = np.random.randn(3,4)

arr
Out[18]: 
array([[-0.47572802, -0.4549984 , -1.76995714, -1.02534855],
       [-1.06983373,  0.21870121,  0.58022886,  0.01403206],
       [ 1.26014179, -0.40125443, -0.69471613,  0.17948693]])

arr.sum()
Out[19]: -3.639245556091149

arr.mean()
Out[20]: -0.30327046300759575

np.mean(arr)
Out[21]: -0.30327046300759575

统计函数可以接受一个可选的参数axis,用于计算指定轴上的统计值,形成一个下降一维的数组。

arr.mean(axis=0)
Out[22]: array([-0.09513998, -0.21251721, -0.62814814, -0.27727652])

arr.mean(axis=1)
Out[23]: array([-0.93150803, -0.0642179 ,  0.08591454])

有些方法,例如cumsum和cumprod方法并不会聚合,而是产生一个中间结果。

arr = np.arange(6).reshape(2,3)

arr
Out[27]: 
array([[0, 1, 2],
       [3, 4, 5]])

arr.cumsum()
Out[28]: array([ 0,  1,  3,  6, 10, 15], dtype=int32)

arr.cumprod()
Out[29]: array([0, 0, 0, 0, 0, 0], dtype=int32)

arr.cumsum(axis=0)
Out[30]: 
array([[0, 1, 2],
       [3, 5, 7]], dtype=int32)

arr.cumprod(axis=0)
Out[31]: 
array([[ 0,  1,  2],
       [ 0,  4, 10]], dtype=int32)
方法 说明
sum() 沿着轴向计算所有元素的累加和
mean() 计算数学平均
std() var() 计算标准差、方差
min() max() 计算最小值、最大值
argmin() argmax() 计算最小值、最大值的位置
cumsum() 计算从0开始的元素累积和
cumprod() 计算从1开始的元素累积积

4.数组的集合操作:

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

np.in1d(arr,[3,5,7])
Out[33]: array([False,  True, False,  True, False,  True, False, False])

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

arr2 = np.array([6,7,8,9,10])

np.union1d(arr1,arr2)
Out[36]: array([ 2,  3,  4,  5,  6,  7,  8,  9, 10])

np.setxor1d(arr1,arr2)
Out[37]: array([ 2,  3,  4,  5,  7,  8,  9, 10])

np.setdiff1d(arr1,arr2)
Out[38]: array([2, 3, 4, 5])
方法 说明
unique(x) 计算x中的唯一值并排序
intersect1d(x,y) 计算x和y的交集,并排序
union1d(x,y) 计算x和y的并集,并排序
in1d(x,y) 计算x中的元素是否包含在y中,返回布尔型数组
setdiff1d(x,y) 计算x和y的差集,在x中但是不在y中的元素
setxor1d(x,y) 计算x和y的异或集,在x或y中,但是不属于x和y交集的元素

5.数组的排序操作:

和Python类似,数组可以使用sort()方法来进行排序操作。
在多维数组中,sort()方法可以根据传递的axis参数值,沿着指定轴向进行排序。

arr = np.random.randn(3,4)

arr
Out[44]: 
array([[ 1.60515118,  1.16753848,  1.51376801,  0.01441127],
       [-0.03171163,  0.94396298,  0.41288009, -0.86564647],
       [ 1.19708637, -1.24565881, -1.58869026, -0.11359642]])

arr.sort()

arr
Out[46]: 
array([[ 0.01441127,  1.16753848,  1.51376801,  1.60515118],
       [-0.86564647, -0.03171163,  0.41288009,  0.94396298],
       [-1.58869026, -1.24565881, -0.11359642,  1.19708637]])

arr.sort(0)

arr
Out[48]: 
array([[-1.58869026, -1.24565881, -0.11359642,  0.94396298],
       [-0.86564647, -0.03171163,  0.41288009,  1.19708637],
       [ 0.01441127,  1.16753848,  1.51376801,  1.60515118]])

6.布尔值数组的操作:

对于布尔值数组,any()方法用于检查数组中是否至少有一个True,all()方法用于检查数组汇总是否每个值都是True。

arr = np.random.randn(3,4)

arr
Out[59]: 
array([[ 0.36222056, -1.48478244,  0.56110975, -1.07177149],
       [-1.31626641, -1.56700112, -0.1727941 , -0.11414005],
       [ 0.10356325,  0.22232551, -0.39910697,  1.45211822]])

arr = arr > 0

arr
Out[61]: 
array([[ True, False,  True, False],
       [False, False, False, False],
       [ True,  True, False,  True]])

arr.any()
Out[62]: True

arr.all()
Out[63]: False

Reference:
《Python for Data Analysis:Data Wrangling with Pandas,Numpy,and IPython》

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

推荐阅读更多精彩内容

  • 一日三餐和运动
    小手啦啦啦阅读 255评论 0 0
  • 正文开始之前先分享一个有趣的事情。 我们食堂在3楼,是顶楼。不过还有往天台的楼梯。今天晚上出食堂准备下楼的时候,看...
    二八蜗牛阅读 475评论 0 2
  • 关于工作,爱你依旧!工作是生活之本,是一个让人又爱又恨的东西,没有的时候渴望有,有了之后又觉得比较烦,但是不得不说...
    千年老妖125阅读 383评论 0 2
  • 次日,两个人来到他父母家里。他们家住的是一个2居室,有60多平米。家里兄弟姊妹4人。他是老大,大弟弟和妹妹结婚了,...
    JL美女姜阅读 217评论 0 0