三 ndarray 数据基本操作

ndarray 数据基本操作

  (1)数组与标量、数组之间的运算

  (2)数组的矩阵积(matrix product)

  (3)数组的索引与切片

  (4)数组的转置与轴对换

  (5)通用函数:快速的元素级数组成函数

  (6)聚合函数

  (7)np.where函数

  (8)np.unique函数




# (1)数组与标量的运算

arr1=np.random.random((2,3))

arr2=np.random.random((2,3))

arr3=np.random.random((3,2))

print(arr1)

# 加减乘除、乘方

print(arr1*2)

print()

print(arr1+2)

print()

print(arr1-2)

print()

print(arr1/2)

print()

print(arr1**2)



# (2)数组与数组的运算

# 加减乘除、乘方、数组的矩阵积

# 两个二维矩阵(行和列的矩阵)满足第一个矩阵的列数与第二个矩阵的行数相同,

# 那么可以进行矩阵的乘法,即矩阵积,矩阵积不是元素级的运算。也称为点积、数量积。

print(arr1+arr2)

print()

print(arr1-arr2)

print()

print(arr1*arr2)

print()

print(arr1/arr2)

print()

print(arr1**arr2)

print()

print(arr1.dot(arr3))



# (3)数组的索引与切片

# 定义一个3*3*3的数组

arr3=np.array([

    [[1,2,3],[4,5,6],[7,8,9]],

    [[10,11,12],[13,14,15],[16,17,18]],

    [[19,20,21],[22,23,24],[25,26,27]]

])

# 索引

print(arr3)

print("# # # # # # #arr3[0]# # # # # # # # # # # # # # ")

print(arr3[0])

print("# # # # # # #arr3[1] # # # # # # # # # # # # # ")

print(arr3[1])

print("# # # # # # # arr3[2] # # # # # # # # # # # # # # ")

print(arr3[2])

print("# # # # # # # arr3[0][0] # # # # # # # # # # # # # # ")

print(arr3[0][0])

print("# # # # # # # arr3[0][1] # # # # # # # # # # # # # # ")

print(arr3[0][1])

print("# # # # # # # arr3[0][2]# # # # # # # # # # # # # # ")

print(arr3[0][2])

print("# # # # # # # arr3[0][2][0] # # # # # # # # # # # # # # ")

print(arr3[0][2][0])

print("# # # # # # # arr3[0][2][1]# # # # # # # # # # # # # # ")

print(arr3[0][2][1])

print("# # # # # # # arr3[0][2][2]# # # # # # # # # # # # # # ")

print(arr3[0][2][2])

# 切片,,,在各维度上单独切片,如果纬度都保留,则使用冒号,不指定起始值

print("# # # # # # # arr3[0,:,0:2]# # # # # # # # # # # # # # ")

print(arr3[0,:,0:2])

print("# # # # # # # arr3[1,:,0:2]# # # # # # # # # # # # # # ")

print(arr3[1,:,0:2])

print("# # # # # # # arr3[2,:,0:2]# # # # # # # # # # # # # # ")

print(arr3[2,:,0:2])

print("# # # # # # # arr3[:,:,0:2]# # # # # # # # # # # # # # ")

print(arr3[:,:,0:2])

print("# # # # # # # arr3[:,0,0:2]# # # # # # # # # # # # # # ")

print(arr3[:,0,0:2])

print("# # # # # # # arr3[:,1,0:2]# # # # # # # # # # # # # # ")

print(arr3[:,1,0:2])

print("# # # # # # # arr3[:,2,0:2]# # # # # # # # # # # # # # ")

print(arr3[:,2,0:2])



# ndarray-布尔类型索引

#  利用布尔类型的数组进行数据索引,最终返回的结果是对应索引数组中数据为True位置的值。

# numpy中不能使用Python中and、or、not,使用&(与)、|(或)、~(非)

arr6=np.random.random((3,4))

print(arr6)

print("# # # # # # ## #arr6>0.5得到的布尔值,为真则取该位置的值,否则就舍去 # # # # # # # # # ")

# A=arr6<0.5

A=arr6>0.5

print(A)

print("# # # # # # ## # # # # # #将对应的布尔值转换为一维数组 # # # # # # # # # # # # # # ## # ")

# 装换成一维数组

arr7=arr6[A]

print(arr7)

print(arr7.shape)



# 利用布尔值进行索引的一个应用实例

names=np.array(['Gerry','Tom','John'])

scores=np.array([

    [98,87,86,95],

    [48,84,84,45],

    [58,7,81,95]

])

class1=np.array(['语文','数学','英语','科学'])

print("Gerry score is:",scores[names=='Gerry'].reshape((-1)))

print("Gerry score is:",scores[names=='Gerry'].reshape((-1))[class1=='数学'])

print("Gerry和Tom的成绩")

print(scores[(names=='Gerry')|(names=='Tom')])

print("非Gerry和Tom的成绩")

print(scores[(names!='Gerry')&(names!='Tom')])

print("成绩大于90的全部输出")

print(scores[scores>90])



# ndarray-花式索引:指的是利用整数数组进行索引的方式。

arr7=np.arange(40).reshape(5,8)

print(arr7)

print("获取第0、3、5行的数据")

print(arr7[[0,2,4]])

print("获取第(0,0)、(3,0)、(4,2)的数据")

print(arr7[[0,3,4],[0,0,2]])

print("获取第0、3、5行的第0、2、3列数据")

print(arr7[[0,3,4]].T[[0,1,2]].T)

print("ix_会产生一个索引器")

print(arr7[np.ix_([0,3,4],[0,1,2])])



# ndarray-花式索引:指的是利用整数数组进行索引的方式。

arr7=np.arange(40).reshape(5,8)

print(arr7)

print("获取第0、3、5行的数据")

print(arr7[[0,2,4]])

print("获取第(0,0)、(3,0)、(4,2)的数据")

print(arr7[[0,3,4],[0,0,2]])

print("获取第0、3、5行的第0、2、3列数据")

print(arr7[[0,3,4]])

print("##################")

print(arr7[[0,3,4]].T)

print("##################")

print(arr7[[0,3,4]].T[[0,1,2]])

print("##################")

print(arr7[[0,3,4]].T[[0,1,2]].T)

print("ix_会产生一个索引器")

print(arr7[np.ix_([0,3,4],[0,1,2])])




# ndarray-数组转置与轴对换

# 数组转置是指将shape进行重置操作,并将其值重置为原始shape元组的倒置,

# 比如原始的shape值为:(2,3,4),那么转置后的新元组的shape的值为: (4,3,2)f

# 可以通过调用数组的transpose函数或者T属性进行数组转置操作

arr=np.random.random(30).reshape(3,5,2)

print(arr)

print("#############################################")

arr1=arr.T

print(arr1)

print("#############################################")

arr2=np.transpose(arr1)

print(arr2)



ndarray-通用函数/常用函数

numpy模块中对ndarray中数据进行快速元素级运算的函数,也可以看做是简单的函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。主要包括一元函数和二元函数。



# 一元函数

arr3=np.array([

    [1,2,-3],

    [0.1,0.6,-0.4]

])

print(arr3)

print("#############################################")

# abs fabs计算绝对值

print(np.abs(arr3))

print("#############################################")

# sqrt 计算各元素的平方根

print(np.sqrt(abs(arr3)))

print("#############################################")

# square计算各元素的评分:arr3**2

print(np.square(arr3))

print("#############################################")

# exp计算各元素指数e的x次方

print(np.exp(arr3))

print("#############################################")

# log2、log10分别计算底数为10、2的log值,以及log(1+x)

print(np.log10(abs(arr3)))

print(np.log2(abs(arr3)))

print(np.log1p(abs(arr3)))

print("#############################################")

# sign计算各个元素的正负号,1:正号  0:0  -1:负号

print(np.sign(arr3))

print("#############################################")

# ceil 计算各个元素的ceil值,大于等于该值的最小整数

print(np.ceil(arr3))

print("#############################################")

# floor 计算各个元素的floor的值,小于等于该值的最大整数

print(np.floor(arr3))

print("#############################################")

# rint 将各个元素的四书五入到最接近的整数

print(np.rint(arr3)

print("#############################################")

# modf 将数组中元素的小数位和整数位以两部分独立数组的形式返回

print(np.modf(arr3))

print("#############################################")

# isnan 返回一个表示“那些值是NaN(不是一个数字)”的布尔类型数组

print(np.isnan(arr3))

print("#############################################")

# isfinite、isinf  分别一个表示”那些元素是有穷的(非inf、非NaN)”或者“那些元素是无穷的”的布尔型数组

print(np.isfinite(arr3))

print(np.isinf(arr3))

print("#############################################")

# cos、cosh、sin、sinh、tan、tanh  普通以及双曲型三角函数

print(np.tan(arr3))

print("#############################################")

# arccos、arccosh、arcsin、arcsinh、arctan、arctanh 反三角函数

print(np.arctan(arr3))



# 二元函数

arr4=np.array([

    [1,0,-3],

    [0.1,0.6,-0.4]

])

arr5=np.array([

    [2,-5,8],

    [-0.1,-0.6,0.4],

])

arr6=np.array([

    [2,-5,8],

    [-0.1,-0.6,0.4],

    [-0.1,-0.6,0.4]

])

print("#############################################")

# mod 取模运算,做除法运算之后的余数

print(np.mod(arr4,arr5))

print("#############################################")

# dot 求两个数组的点积

print(np.dot(arr4,arr6))

print("#############################################")

# greater(大于)、greater_equal(大于等于)、less(小于)、less_equal(小于等于)、equal(等于)、not_equal(不等于)

# 执行元素级别的比较运算,最终返回一个布尔型数组

print(np.greater(arr4,arr5))

print("#############################################")

# logical_and、logical_or、logical_xor

# 执行元素级别的布尔逻辑运算,相当于中缀运算符&、|、^

print(np.logical_and(arr4,arr5))

print(np.logical_xor(arr4,arr5))

print("#############################################")

# power 求解对数组中的每个元素进行给定次数的指数值,类似于: arr ** 3

print(np.power(arr3,4))



 ndarray-聚合函数

 聚合函数是对一组值(eg一个数组)进行操作,返回一个单一值作为结果的函数。

 当然聚合函数也可以指定对某个具体的轴进行数据聚合操作;

#常将的聚合操作有:平均值mean、最大值max、最小值min、方差std等等

arr7=np.array([

    [2,-5,8],

    [-0.1,-0.6,0.4],

    [-0.1,-0.6,0.4]

])

print(np.mean(arr7))

print(np.max(arr7))

print(np.min(arr7))

print(np.std(arr7))



# np.where函数

# np.where函数是三元表达式x if condition else y的矢量化版本

arr8=np.array([2,7,8])

arr9=np.array([-0.1,-0.6,0.4])

condition=arr8>arr

result=np.where(condition,arr8,arr9)

print(result)


# np.unique函数

# np.unique函数的主要作用是将数组中的元素进行去重操作(也就是只保存不重复的数据)

arr10=np.array(["Python","Python","java"])

print(arr10)

print(np.unique(arr10))


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

推荐阅读更多精彩内容

  • import numpy as np 创建ndarray data1 = [6,7.5, 8, 0, 1]arr1...
    陆文斌阅读 630评论 0 1
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,107评论 0 18
  • 第四课 - NumPy 入门 本课内容: 0. 导入 NumPy 包 1. 创建 NumPy 数组 2. 索引和切...
    进步小小青年阅读 448评论 0 2
  • 在网上经常看到:POST应该被用来创建一个资源,并且PUT应该被用来修改一个。应该使用PUT来创建一个资源,并且应...
    妖精的九尾阅读 381评论 0 0
  • “大牙”是我们当地县城里一个有名的痞子,他本姓季,因为有一口黄熏熏的大牙,故在他背后人们都叫他“季大牙”。 刚开始...
    暖曦阅读 869评论 11 32