Numpy 数组导向编程 下|学习笔记

简介: 快速学习 Numpy 数组导向编程 下

开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践Numpy 数组导向编程   下】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1067/detail/15377


Numpy 数组导向编程   下

 

内容介绍

一、数学和统计方法

二、布尔数组的方法

三、排序

四、单一性和其他集合逻辑

 

一、数学和统计方法

那么下面再来看一下 Numpy 里面的数学和统计方法,这个对于专业同学来说应该是比较简单,就是一些计算算统计值的一些函数,然后可以按照某一个轴来计算,或者在整个数组上进行计算。那么这个函数主要有一些聚合函数或者叫汇总函数,那一般的都会被叫做降维、求和、平均值以及标准差。那么下面来看一些汇总统计的例子。那么这里大家看到五行四列创建这样一个随机数组,它作为随机的多维数组。

In [9]: arr = np. randon.randn(5, 4)

arr

Out [9]: array([[ 0.59668886, 0.0443165 , 0.46425491, -0.44225775]

[-0.07679124. 0.11099483,-0.04723338, 0.096159 ].

[ 0.25249836,-0.59914664. 0.43061394,-0.28638254].

[ 0.55876525, -0.45482101, 0.42937669, 1.06275356.

[ 0.25732032, 1.66634594, 0.24840452, -1.09161622]])

In [4]: arr. mean ()| I

Out [4]: -0.008387550588445092

In [5]: np. mean(arr)

Out [5]: -0.008387550588445092

In [6]: arr. sum()

Out [6]: -0.16775101176890184

然后就可以求平均值了,那么注意看这是一个汇总的平均值,它是得到整个多维数组的平均值,所以它是可以降维了。它不是每一个元素上的平均值,平均值本身就是汇总的概念,它不是单个元素通用函数的操作。

然后也可以用这样的用法就是 Numpy .mean。然后可以求和,比如 mean, sum 这样的函数能接受 axis 作为参数来计算统计数字,接下来看下面的例子。

In [17]:arr.mean(axis=1)

Out [17]: array([ 0.16575063, 0.0207823,-0.05060422, 0.39901862, 0.27011364])

In [16]: arr.sum(axis=0)

Out[16]: array([ 1.58848155, 0.76768962, 1.52541669,-0.66134396])

对于 arr.mean(axis=1)这样的等于1表示的是在行的数据上面,每一行上面有几列,然后就按照列上的数据进行汇总。前面数据是五行四列的,所以它产生了五个结果,这五个结果是在一行上面的四列的平均值,第一行四列的平均值,第二行四列的平均值,所以说行上面的1代表的是对于列来进行求平均值。

那么很显然当x=0的时候是按照列,在列上面的每一行加在一起的求和,所以说零和一要区分清楚,下面有解释就是说这里 arr.mean(1) 表示,compute mean acros the columns(计算各列之间的平均值)。arr.sum(0) 表示,compute sum down the rows(计算各行总和),所以说要注意差别,注意值的区分。其他一些方法,像cumsum和cumprod不做汇总,而是产生一个中间结果的数组,接下来看下面的例子。

In [9]:arr = np. array(D,1. 2、3, 4, 5.6,7]|

arr.cunsun()

Out[9]:array([ 0.1. 3, 6,10, 15,21,28],dtype=int32)

上面的计算是一个累加的结果,0+1=1,1+2=3,34396以此类推。

In [17]:np.cunstm?

对于多维数组,accumulation functions(累积函数)比如cumsum,返回的是同样大小的数组,但是部分聚合会沿着指示的轴向较低维度进行切片:10]:arr = np.array([[o, 1, 2], [a, 4.5].[6, 7, 8]])

(10]:array([[o, 1, 2],{3,4,5}

这是一个零到七的一个列表,下面用arr.cumsum 执行一下看看结果是什么,它的结果是产生一个中间数组的结果,它并不是刚刚讲的汇总,它的规律是上面的计算是一个累加的结果,这里有累加的公式,通过帮助看一些细节。

对于多维数组,accumulation functions(累积函数)比如cumsum,返回的是同样大小的数组,但是部分聚合会沿着指示的轴向较低维度进行切片。那这里构造了一个三行三列的数组,然后用 cumsum(axis=0)表示行,对于1一般表示列,这样做一下的结果。所以它的累加是怎么累加的,可以按照上面的公式去对照一下,然后在下面还是按照列X=1的列就乘法了。

In [19]: arr=np.array([[o. 1, 2],[3. 4, 5],[6, 7, 8]])arr

Out[19]:array([[o. 1. 2].

3,4.5].

[6. 7. 8]])

In [11]: arr.cumsum(axisI0) #沿着行加法

Out[11]:array([[0. 1. 2].

[3. 5. 7].

[9. 12, 15]], dtype=int32)

In [20]: arr.cumprod(axis=1) #沿着列乘法

Out[20]: array([[ 0. 0. 0].

[ 3. 12. 60].

[ 6. 42,336]],dtype=int32)

 

二、布尔数组的方法

再下一个内容是布尔数组的方法应用, sum 是用来计算布尔数组中有多少个 ture 的,因为在计算机里面要注意 ture 就是1,false 就是0,所以 sum 一下就可以证明有多少个 1就有多少个ture ,那接下来看下面的这个例子。

In [12]:arr = op.randoe.randn(100)/

(arr ) 0).sum(0# Number of positive values

Out[12]:55

In [13]: bools = m arte......是ru才会返回true,

bools = np.array(Palse, False, True, False])

In[14]: bools.any0)

Out[14]:True

In[15]:bools.a110

Out[15]:False

看下面这个例子它创建随机数组,它是一百多元素的随机数组,大家注意看 Arr大于零,大于零以后如果结果也是大于零,那么它的结果就是 ture ,否则就是 flase 。

它就产生一个布尔数组,然后因为 ture 就是1,所以就可以求和。其次看到运行结果,这里面存在54个正数,大于零就是正数所以存在54个正数,这就是布尔数组很巧妙的地方。然后还有其他两个办法来判断这个布尔数组,Lanv和all对于布尔数组特别有用,any检测数组中只要有一个ture返回就是ture, 而all检测数组中都是true才会返回true。这里面构建了 np.array 的数组,它里面的数值是布尔型的,如果用 any 运行结果就是 ture ,如果用 all 的话只有都是 ture 才是 ture 。比如说这里构建了一个样本数据,这必须有一个女性参加,这样就合格了。

 

三、排序

然后学习下面一个知识就是排序,numpy 中的排序,那么前面用过numpy  里面的 random 模块里面的随机数,大家想看看它的使用方法可以看一下帮助。

In [25]: np. random.randn?

#返回符合正态分布的数值

In [26]: arr = np.random.randn(6)

arr

Out[26]: array([ 0.17802325, -0.8397805 , 0.63065723, 1.30558435,-0.4214941,-0,78002002])

In [27]: arr. sort ()

In [28]: arr

Out[28]: array([-0.8397805 , -0.78002002, -0.4214941 , 0.17802325, 0.63065723,1.30558435])

如果是多维数组,还可以按axis排序:

它返回的是一个符合正态分布的数组,那么下面可以用一下,创建六个元素的随机数,它是符合正态分布的,然后它里面可以用数字函数排序,看一下排序结果从小到大排序,同时发现这个值改变掉了,刚刚是没有序的,但是看现在运行是有序的,就这个值是改变了。

In [29]: arr = np.random. randn (5, 3)

arr

Out[29]: array([[-0.76185631,  1.05152802, 1.06816836],

[-0.11757383,-0.53741589, 1.67076762],

1.22314565, 0.40200961,-1.06664294],

[-1.15495365, 0.68737544, 1.4245887 ],

[1.50863193,-0.75471796,-0.75452104]])

In [30]: arr.sort(1)

In [31]: arr

Out [31]: array([[-0.76185631】 1.05152802, 1.06816836],

[-0.53741589,-0.11757383, 1.67076762].

[-1.06664294. 0.40200961, 1.22314565],

[-1.15495365, 0.68737544, 1.4245887 ].

[-0.75471796,-0.75452104, 1.50863193]])

In [22]: arr.sort(0)

arr

Out[22]: array([[-1.18370647,-0.56706953, 0.13891474].

[-1.17800412,-0.17237675, 1.55011123],

[-0.55774521, 0.65546116, 1.97750271],

010433919 1 18276504 2 01061151

同时也可以按照坐标轴来排序,然后创建一个五行三列的数组,按照零代表行一代表列,按照这个排序来排一下,看一下这个排序的结果是在一个列当中,顺序其实是列和列之间的比较,大家注意看一下它的排序,零是在行和行之间比较。

同时要注意 sort 方法,它的值是会改变原有数组的顺序。刚刚看过这个例子里面 arr 值是改变掉的。

 

四、单一性和其他集合逻辑

那么这下面就是来了解一下 numpy里面所谓的单一性和其他结合的一个逻辑,numpy 也有一些基本的集合操作可以用于一维数组,它同时能够返回排好序且不重复的值。

然后下面创建一个 np array ,下面如果 unique 看一下,那么它是唯一的不重复的,这个 unique 函数就特别的有价值,然后在做数据分析的时候,某一列比如家庭收入里面可能有很多值,然后有 unique 就知道有哪几种不同的家庭收入。所以这个 unique 特别有价值,它就等于就是列的类别或者因子。

In [33]: names = np.array([ Bob', ’Joe', 'Will', Bob', 'Will', 'Joe', Joe'])

np.unique(names)

Out[33]: array([' Bob', 'Joe', 'Will']. dtype='<U4')

In [24]: ints =np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])

In [25]: np.unique(ints)

Out[25]: array([1, 2, 3, 4])

再看下面一个例子,那么这是竖直型的,然后运行以后,它不重复的数据有这样一些,那么如果要用纯 python代码写的话, python 集合里面的元素不能重复,那么像这个inld这个函数也可以去看一下,这个函数测试的是一个数组是否在另外一个数组里面,它返回一个布尔,大家可以看一下它的含义,那么还有一些数据的集合操作也可以补充一下。

In [26]:sorted(set fnames))

Out[26]: ['Bob’,"Joe', 'Will']

np.inld,测试一个数组的值是否在另一个数组里,返回一个布尔数组:

In [27]:values =np.array([6, 0, 0, 3. 2, 5, 6])

In [28]:np.inld(values,[2, 3, 6])

Out [28]: array([True, False, False, True,True, False, True])

相关文章
|
6天前
|
计算机视觉 Python
PIL图像转换为Numpy数组:技术与案例详解
本文介绍了如何将PIL图像转换为Numpy数组,以便利用Numpy进行数学运算和向量化操作。首先简要介绍了PIL和Numpy的基本功能,然后详细说明了转换过程,包括导入库、打开图像文件、使用`np.array()`或`np.asarray()`函数进行转换,并通过打印数组形状验证转换结果。最后,通过裁剪、旋转和缩放等案例展示了转换后的应用,以及如何将Numpy数组转换回PIL图像。此外,还介绍了处理base64编码图像的完整流程。
19 4
|
2月前
|
Python
Numpy学习笔记(一):array()、range()、arange()用法
这篇文章是关于NumPy库中array()、range()和arange()函数的用法和区别的介绍。
64 6
Numpy学习笔记(一):array()、range()、arange()用法
|
2月前
|
索引 Python
Numpy学习笔记(三):np.where和np.logical_and/or/not详解
NumPy库中`np.where`和逻辑运算函数`np.logical_and`、`np.logical_or`、`np.logical_not`的使用方法和示例。
192 1
Numpy学习笔记(三):np.where和np.logical_and/or/not详解
|
2月前
|
Python
Numpy学习笔记(四):如何将数组升维、降维和去重
本文介绍了如何使用NumPy库对数组进行升维、降维和去重操作。
57 1
|
2月前
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
58 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
2月前
|
机器学习/深度学习 索引 Python
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
本文解释了NumPy中`argmax`函数的`axis`参数在不同维度数组中的应用,并通过代码示例展示了如何使用`axis=0`、`axis=1`和`axis=-1`来找到数组中最大值的索引。
184 0
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
|
2月前
|
Python
使用 NumPy 进行数组操作的示例
使用 NumPy 进行数组操作的示例
43 2
|
2月前
|
PyTorch 算法框架/工具 Python
Pytorch学习笔记(十):Torch对张量的计算、Numpy对数组的计算、它们之间的转换
这篇文章是关于PyTorch张量和Numpy数组的计算方法及其相互转换的详细学习笔记。
46 0
|
3月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
110 0
|
4月前
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
66 0