Numpy--通用函数|学习笔记

简介: 快速学习 Numpy--通用函数

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

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


Numpy--通用函数

 

内容介绍

一、前言

二、通用函数

 

一、前言

在part two里面要学的第二个内容是Python数据科学包里面的一个重要的基础,来看看  numpy 里面有哪些知识需要掌握,同时给同学们总共准备了四个 nextbook 文件,其中第一个是numpy 里面的最基本的知识,这个内容让同学们自己去看这份多维数组对象的的文件,然后去掌握一下相关内容。

这个课里面主要介绍是第二个内容里面的通用函数以及第三个内容数组导向的编程,第四个内容比较简单,内容就是 numpy  的数据怎么保存,怎么导入,换句话而言就是它的输入和输出,这个也自己去看一下。

 

二、通用函数

那么下面的学习一下第二个内容numpy 里面可以做一些通用函数,函数的运算就叫通用函数。通用函数可以实现快速的点对点的数组运算,点对点就是数组里面的元素对元素的运算,这个名字叫做 universal function ,或 ufunc ,它是建立在第一个内容ndarray的基础之上的,是用来在ndarray中实现element-wise操作的,可以实现元素与元素之间的操作,可以认为这个 ufunc 可以把一些简单的函数做快速的向量化封装,输入是一个以上的标量,输出也是一个以上的标量。

比如很多通用函数ufuncs都是点对点的变换,下面来学习里面的内容,像sqrt或exp:首先先导入 numpy ,为了减少输入给它做一个别名Np的两个字母,原来它是五个字母,下面使用 np.arange 函数,numpy当中是arange 函数,十代表的是零到九,这样的十个数,现在显示一下数组,在 out 这行显示的是在第一个数组前面有一个 array,表示它是一个numpy的多维数组对象,numpy 的 array 的多维数组对象是在第一个 nextbook,学这个之前应该把第一个的相关内容走一遍。

In[1]:import numpy as np

arr = np.arange(10)

arr

Out [1]:array([o, 1, 2, 3, 4, 5, 6, 7, 8, 9])

接下来是numpy 当中求平方根的通用函数,然后 arr 上面求开平方,然后它是元素级别的这一个函数,它会作用在每一个元素上面,大家看看它开放的结果,这个也是 numpy 强大的地方,除了它本身的这个性能速度很快,然后它可以有通用函数,还有作用在第一个多维数组的每一个元素上面,这是它非常强大的地方,非常适合做机器学习当中的数据挖掘和文本挖掘。

In[23]:np.sqrt(arr)

Out [23]: array([0. ,1. ,1.41421356, 1.73205081,2. j)

2.23606798,2.44948974,2.64575131,2.82842712,3.

下面再看一些例子,这个是exp,那么它是e 的多少次方,它是在每一个元素上进行操作,那么e的零次方是一,那么里面的每一个值可以对应看一下。那么里面就是传了一个多维数组,它可以在每个元素上进行操作。

In [3]: np.exp(arr)

Out [3]:array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.008553699+01,

5.45981500e+01.1.48413159e+02, 4.03428793e+02, 1.09663316e+03,

2.98095799e+03, 8.10308393e+03])

这些函数叫做一元通用函数(unary ufuncs)。其他一些函数,比如add或maximum,需要两个数组(binary ufuncs),并返回一个数组作为结果。接下来可以看一下下面的例子,x 和 y两个随机数,然后显示一下这个结果,然后要来求这两个里面的最大值,那么它是需要两个参数加入进去,然后运行一下,大家应该能够发现它这个里面反馈的是一个 x 和 y 里面,然后两个对应的元素,哪一个大就显示哪一个,x里面的第一个元素是负的1.06,y里面是0.2727,第二个也是一样的元素和元素的操作。

In [25]:x= np. random. randn(8)

y =np.random.randn(8)

Out[25]: array([ 1.04165307,-1.43376497, -0.95048054, -0.01534411,-1.34484258,

1.09032066, 0.2778578,-1.32737648])

In [26]:y

Out[26]: array([ 1.79557033, -0.37206594, -0.50156849, -0.55333631, 1.48444226,

1.61665193, 2.83772666, -0.0805214 ])

In [27]:np.maximum(x, y)

Out[27]:array([ 1.79557033,-0.37206594.-0.50156849,-0.01534411.1.48444226.

1.61665193, 2.83772666.-0.0805214 ])

那么下面大家可以讨论一下,比如在 np 当中也有一个 max 函数,对于 max 函数就把 x 和 y 放到中括号里面,把它构成一个列表,然后再看看单独求x的最大值和单独求y的最大值。然后来看它里面的这个结果是什么,那么运行一下的结果,因为这个例子主要重新执行它的数据都变化了,那么在x和y两个有一个列表,然后要求这个列表里面的最大值,这个最大值在整个数据里面是2.6,大家看看应该是在x里面,它里面最大的是2.6。然后如果是x是2.6,y是0.61,这个是y,y最大值是0.61,大家注意观察一下这个结果,那么mamimum点对点的比较x和y中的元素。尽管不常见,但ufunc也能返回多个数组。

例如modf,这是一个向量版的divmod(python内建函数),modf会返回小数部分和整数部分:本函数是实现a除以b,然后返回商与余数的元组。如果两个参数a,b都是整数,那么会采用整数除法,结果相当于(a//b, a % b)。如果a或b是浮点数,相当于(math.floor(a/b),a%b)。

In [7]:np.max([x,y]),np.max(x),np.max(y

Out[7]:(2.6069921225028114,2.6069921225028114, 0.6154500812910014)

那么下面再看这一个随机数,然后就是在每一个随机数上面再乘以五,然后再下面这个是用了一个除法,它可以有整数和余数,一个是整个部分,然后一个是余数。那么运行一下这个函数,它反馈的结果是反馈两个值,那么它在余数部分一个元素是0.39,第二个是负的0.53,它们就是余数部分。然后再看一下整数部分,它的第一个元素是2,第二个是负0,所以一个通用函数返回的结果是两个数组,刚刚那个特殊函数是有两个参数就是两个数组,而这个是返回一个数组。这个例子就是告诉的是一个特殊情况,给它是一个arr 数组返回两个数组。

In [8]: arr= np. random.randn(7)*5

arr

Out [8]: array([2.39066397, -0.53549094. -8.47985563. -2.189113 6.0836329-2.94515023. 8.78793467)

In [10]: remainder, whole_part =np.modf(arr)

remainder

Out [10]: array([ 8.23454109e-01,-4.00246686e-02,-6.53887900e-01,-5.52413588e-01,5.01665824e-01, 8.22405852e-04,-5.36379749e-01])

In[12]: whole_part

Out[12]:array([ 2.. -3..-8., -0., 0., 8.,])

那么另外这个 ufunc funtion 通用函数,它能接受一个可选参数作为输出,那么这样可以直接更改原有的数组。比如说上面的那个 array ,刚刚创建的随机的数组乘以五以后是这样的一个值,然后给它开平方,然后后面给它一个注释,它没有改变原有的数组那么如果显示一下原有数组,大家注意看到它的这个值还是原来的,它没有改变。那么开方这有几个空值,那因为负的是无法开放的,所以它是返回空值的。然后显示到这个 arr ,它还是原始值并没有改变。

In[12]: arr

Out[12]:array([ 2 39066397 -0.53549094,-8.47985563,-2.189113 6.0836329

-2.94515023. 8.78793467])

In[13]:np.sqrt(arr)#没有改变原有的arr

D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntineWarning: invalid value encountered in sqrt ""Entry point for launching an IPython kernel.

Out [13]:array([1.54617721, I nan. nan, nan, 2.46650216.

nan. 2.96444509])

In[14]: #没有改变原有的arr

print(arr)

[ 2.39066397-0.53549094 -8.47985563 -2.189113 6.0836329 -2.94515023

8.78793467]

那么如果想改变就可以接受一个可选参数作为输出,这样就可以改变原有的结果。然后来看一个例子,对于 arr 进行开方,然后再给它一个 arr ,就是用一个 arr 接触 arr 的开方,这样就改变了原有的数组的值。然后显示一下这个速度结果,后来发现这个arr 改变了。然后呢再举个例子,这个是创建一个149这样的一个andy,它就是一个一维数组。

然后开方看到结果是123,接下来显示一下a1,它是123,看到A1的值改变掉了。

那么这就是给同学们讲了一下通用函数的一些概念,当然这个关于Python的知识只是给大家引入一些比较重要的,最基础给大家提供资料。

如果大家还想进一步扩充,那么这种思考题也可以去考虑一下,比如一元的通用函数和二元通用函数可以在这里做做笔记再扩展一下。

In[15]: np.sqrt(arr, arr,casting='unsafe') #改变了原有的arr

D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in sqrt“"Entry point for launching an IPython kernel.

Out [15]:array([1.54617721, nan, nan, nan, 2.46650216,

nan, 2.96444509])

In [16]: arr

nan,

Out[16]:array([1.54617721,

nan, 2.96444509]) nan, nan,2.46650216,

In [17]: al-np.array([1,4.9])I

In [22]: np.sqrt(al,al,casting-'unsafe')

Out [22]: array([1, 2, 3])

In{19}:a1

Out{19}:array([1,2,3])

相关文章
|
3月前
|
Python
NumPy 教程 之 NumPy 统计函数 9
NumPy提供了多种统计函数,如计算数组中的最小值、最大值、百分位数、标准差及方差等。其中,标准差是一种衡量数据平均值分散程度的指标,它是方差的算术平方根。例如,对于数组[1,2,3,4],其标准差可通过计算各值与均值2.5的差的平方的平均数的平方根得出,结果为1.1180339887498949。示例代码如下: ```python import numpy as np print(np.std([1,2,3,4])) ``` 运行输出即为:1.1180339887498949。
130 50
|
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`的使用方法和示例。
193 1
Numpy学习笔记(三):np.where和np.logical_and/or/not详解
|
3月前
|
Python
NumPy 教程 之 NumPy 统计函数 10
NumPy统计函数,包括查找数组中的最小值、最大值、百分位数、标准差和方差等。方差表示样本值与平均值之差的平方的平均数,而标准差则是方差的平方根。例如,`np.var([1,2,3,4])` 的方差为 1.25。
106 48
|
2月前
|
Python
Numpy学习笔记(四):如何将数组升维、降维和去重
本文介绍了如何使用NumPy库对数组进行升维、降维和去重操作。
58 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`来找到数组中最大值的索引。
186 0
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
|
2月前
|
PyTorch 算法框架/工具 Python
Pytorch学习笔记(十):Torch对张量的计算、Numpy对数组的计算、它们之间的转换
这篇文章是关于PyTorch张量和Numpy数组的计算方法及其相互转换的详细学习笔记。
46 0
|
3月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 8
NumPy提供了多种排序方法,包括快速排序、归并排序及堆排序,各有不同的速度、最坏情况性能、工作空间和稳定性特点。此外,NumPy还提供了`numpy.extract()`函数,可以根据特定条件从数组中抽取元素。例如,在一个3x3数组中,通过定义条件选择偶数元素,并使用该函数提取这些元素。示例输出为:[0., 2., 4., 6., 8.]。
31 8
|
3月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 2
介绍NumPy` 中的排序方法与条件筛选函数。通过对比快速排序、归并排序及堆排序的速度、最坏情况性能、工作空间需求和稳定性,帮助读者选择合适的排序算法。此外,还深入讲解了 `numpy.argsort()` 的使用方法,并通过具体实例展示了如何利用该函数获取数组值从小到大的索引值,并据此重构原数组,使得其变为有序状态。对于学习 `NumPy` 排序功能来说,本教程提供了清晰且实用的指导。
42 7