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])

相关文章
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
350 0
|
计算机视觉 Python
PIL图像转换为Numpy数组:技术与案例详解
本文介绍了如何将PIL图像转换为Numpy数组,以便利用Numpy进行数学运算和向量化操作。首先简要介绍了PIL和Numpy的基本功能,然后详细说明了转换过程,包括导入库、打开图像文件、使用`np.array()`或`np.asarray()`函数进行转换,并通过打印数组形状验证转换结果。最后,通过裁剪、旋转和缩放等案例展示了转换后的应用,以及如何将Numpy数组转换回PIL图像。此外,还介绍了处理base64编码图像的完整流程。
472 4
|
索引 Python
Numpy学习笔记(三):np.where和np.logical_and/or/not详解
NumPy库中`np.where`和逻辑运算函数`np.logical_and`、`np.logical_or`、`np.logical_not`的使用方法和示例。
902 1
Numpy学习笔记(三):np.where和np.logical_and/or/not详解
|
Python
Numpy学习笔记(四):如何将数组升维、降维和去重
本文介绍了如何使用NumPy库对数组进行升维、降维和去重操作。
256 1
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
704 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
PyTorch 算法框架/工具 Python
Pytorch学习笔记(十):Torch对张量的计算、Numpy对数组的计算、它们之间的转换
这篇文章是关于PyTorch张量和Numpy数组的计算方法及其相互转换的详细学习笔记。
342 0
|
2月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
189 0
|
4月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
425 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
4月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
407 0
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
338 1