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

相关文章
|
1天前
|
索引 Python
NumPy 数组迭代与合并详解
NumPy 数组迭代包括基本和高级方法。使用 `for` 循环可迭代一维、二维及多维数组。`np.nditer()` 提供更多控制,如迭代顺序、过滤、类型转换和步长。`np.ndenumerate()` 返回元素及其索引。练习涉及合并数组操作。
8 0
|
1天前
|
Python
NumPy 数组复制与视图详解
NumPy 的复制和视图用于创建新数组。复制创建独立于原数组的新数组,如 `arr.copy()`、`np.array(arr)` 和 `arr[:]`。视图则是原始数组的引用,修改会影响原数组,如 `arr.view()`、切片和 `arr.reshape()`。使用 `arr.base` 可检查数组是否为视图。练习:创建数组 `arr` 并用三种方法创建副本,验证它们是否独立。
17 0
NumPy 数组复制与视图详解
|
1天前
|
存储 索引 Python
NumPy 数组切片及数据类型介绍
了解 NumPy 数组切片,用于从数组中提取子集。一维数组切片使用 `start:end:step`,如 `arr[1:5]`。二维数组切片如 `arr[1:3, 0:3]`。创建 5x5 数组并练习切片,例如打印第一行、第二列、对角线元素和 2x2 子数组。别忘了检查数据类型,如 `arr.dtype`,并使用 `astype()` 转换类型。
23 0
|
1天前
|
存储 索引 Python
NumPy 数组创建方法与索引访问详解
NumPy 的 `ndarray` 是其核心数据结构,可通过 `array()`、`zeros()`、`ones()` 和 `empty()` 函数创建。`array()` 可以将列表等转换为数组;`zeros()` 和 `ones()` 生成全零或全一数组;`empty()` 创建未定义值的数组。此外,还有 `arange()`、`linspace()`、`eye()` 和 `diag()` 等特殊函数。练习包括使用这些函数创建特定数组。
116 1
|
1天前
|
存储 数据挖掘 API
【NumPy基础】- Numpy数组和矢量计算
【NumPy基础】- Numpy数组和矢量计算
|
1天前
|
机器学习/深度学习 测试技术 数据处理
Numpy Tile:数组复制的艺术与效率之键
【4月更文挑战第21天】
21 0
|
1天前
|
存储 数据采集 数据处理
《Numpy 简易速速上手小册》第6章:Numpy 高级数组操作(2024 最新版)
《Numpy 简易速速上手小册》第6章:Numpy 高级数组操作(2024 最新版)
33 1
《Numpy 简易速速上手小册》第6章:Numpy 高级数组操作(2024 最新版)
|
1天前
|
存储 机器学习/深度学习 数据处理
NumPy:从初识到实战,探索Python科学计算的无限可能
NumPy:从初识到实战,探索Python科学计算的无限可能
38 0
|
1天前
|
机器学习/深度学习 存储 算法
Python中的NumPy库:数值计算与科学计算的基石
【2月更文挑战第29天】NumPy是Python科学计算的核心库,专注于高效处理大型多维数组和矩阵。其核心是ndarray对象,提供快速数组操作和数学运算,支持线性代数、随机数生成等功能。NumPy广泛应用于数据处理、科学计算和机器学习,简化了矩阵运算、统计分析和算法实现,是数据科学和AI领域的重要工具。
|
1天前
|
存储 索引 Python
请解释Python中的NumPy库以及它的主要用途。
【2月更文挑战第27天】【2月更文挑战第97篇】请解释Python中的NumPy库以及它的主要用途。