什么是Python中n维数组的通用函数?
在本文中,我们将讲解Python中的通用函数以及它们如何应用于n维数组。
通用函数(universal function) (或 ufunc )是一种针对ndarray数组逐个元素操作的函数,提供数组广播(array broadcasting)、类型转换和各种其他标准功能。换句话说,ufunc是一个固定接受数量的标量输入并返回数量固定的标量输出的函数的“矢量化”封装器。
它们是NumPy库中的简单数学函数。 NumPy 包括支持各种操作的 通用函数 。
这些函数包含标准三角函数、算术运算、复数处理、统计函数等。以下是通用函数的一些特点:
- 这些函数与ndarray(N维数组)一起使用,这是NumPy的数组类。
-
它提供快速的元素数组操作。
-
它提供各种函数,如数组广播,类型转换等。
-
NumPy通用函数是 numpy.ufunc 类中的对象。
-
利用frompyfunc库函数可以使Python函数成为通用函数。
-
当应用相应的数组算术运算符时,某些ufunc会自动调用。当使用“+”运算符逐元素添加两个数组时,内部将调用 np.add() 。
更多Python相关文章,请阅读:Python 教程
三角函数
由于这些三角函数操作是以弧度为单位进行的,因此必须将角度乘以pi/180转换为弧度。只有这样,才能使用三角函数。它们接受一个参数数组作为输入。
| 三角函数名称 | 描述 |
|---|---|
| sin,cos,tan | 计算角度的正弦、余弦和正切 |
| arcsin,arccos,arctan | 计算反正弦、反余弦和反正切角度 |
| hypot | 计算指定直角三角形的斜边长度 |
| sinh,cosh,tanh | 计算双曲正弦、余弦和正切角度 |
| arcsinh,arccosh,arctanh | 计算反双曲正弦、余弦和正切角度 |
| deg2rad | 将角度从度转换为弧度 |
| rad2deg | 将角度从弧度转换为度 |
示例:
# 导入numpy模块并设置别名为np
import numpy as np
# 创建一个角度数组
inputAngles = np.array([0, 30, 45, 60, 90, 180])
# 将输入角度从度转换为弧度,使用deg2rad() 函数
radians_angles = np.deg2rad(inputAngles)
# 打印输入角度的正弦值
print('输入数组角度的正弦值:')
sineValues = np.sin(radians_angles)
print(sineValues)
print()
# 打印正弦值的反正弦值
print('正弦值的反正弦值:')
print(np.rad2deg(np.arcsin(sineValues)))
print()
# 打印输入角度的双曲正弦值
print('输入角度的双曲正弦值:')
sineh_value = np.sinh(radians_angles)
print(sineh_value)
print()
# 打印双曲正弦值的反正弦值
print('双曲正弦值的反正弦值:')
print(np.sin(sineh_value))
print()
# 打印直角三角形的斜边
triangle_base = 4
triangle_height = 3
print('直角三角形的斜边 = ', np.hypot(triangle_base, triangle_height))
输出结果
在执行上述代码后将会产生以下输出结果 −
输入数组角度的正弦值:
[0.00000000e+00 5.00000000e-01 7.07106781e-01 8.66025404e-01
1.00000000e+00 1.22464680e-16]
正弦值的反正弦值:
[0.0000000e+00 3.0000000e+01 4.5000000e+01 6.0000000e+01 9.0000000e+01
7.0167093e-15]
输入角度的双曲正弦值:
[ 0. 0.54785347 0.86867096 1.24936705 2.3012989 11.54873936]
双曲正弦值的反正弦值:
[ 0. 0.52085606 0.76347126 0.94878485 0.74483916 -0.85086591]
直角三角形的斜边 = 5.0
在此:
- numpy.array()函数 返回一个ndarray,它是一个符合给定要求的数组对象
统计函数
统计函数用于计算数组元素的平均值、中位数、方差和最小值。函数如下:
| 统计函数 | 描述 |
|---|---|
| amin, amax | 返回沿指定轴的数组的最小值和最大值 |
| ptp | 返回沿指定轴的数组的值范围(最大值-最小值) |
| median | 计算沿指定轴的数据的中位数 |
| mean | 计算沿指定轴的数据的平均值 |
| percentile(a, n, axis) | 计算沿指定轴的数组的第n个百分位数 |
| std | 计算沿指定轴的数据的标准偏差 |
| var | 计算沿指定轴的数据的方差 |
| average | 计算沿指定轴的数据的平均值 |
示例
# 导入带有别名的numpy模块
import numpy as np
# 创建数组
inputArray = np.array([20, 45, 50.5, 60, 55.5, 10])
# 打印数组中的最小值
print('输入数组中的最小值:')
print(np.amin(inputArray))
# 打印数组中的最大值
print('输入数组中的最大值:')
print(np.amax(inputArray))
# 打印峰峰值,即输入数组最大值减去最小值的值范围
print('输入数组的值范围(最大值-最小值):')
print(np.ptp(inputArray))
# 打印输入数组的50%百分位数
print('输入数组的50%百分位数:')
print(np.percentile(inputArray, 50))
# 打印输入数组的平均值
print('输入数组的平均值:')
print(np.mean(inputArray))
# 打印输入数组的中位数
print
输出
输入数组中的最小值:
10.0
输入数组中的最大值:
60.0
输入数组的值范围(最大值-最小值):
50.0
输入数组的50%百分位数:
50.75
输入数组的平均值:
38.333333333333336
输入数组的中位数:
47.5
输入数组的标准偏差:
18.19785776458788
输入数组的方差:
331.80555555555554
输入数组的平均值:
38.333333333333336
在执行时,上面的程序将生成以下输出,如下所示:
输入数组中的最小值:
10.0
输入数组中的最大值:
60.0
输入数组的范围(最大值 - 最小值):
50.0
输入数组的50th百分位数:
47.75
输入数组的平均值:
40.166666666666664
输入数组的中位数:
47.75
输入数组的标准差:
18.598088312751095
输入数组的方差:
345.88888888888886
输入数组的平均值:
40.166666666666664
位操作函数
位操作函数将整数作为输入参数,并对它们的二进制表示执行位操作。以下是它包含的函数。
| 位操作函数 | 说明 |
|---|---|
| 按位与 | 对两个数组元素执行按位“与”操作 |
| 按位或 | 对两个数组元素执行按位“或”操作 |
| 按位异或 | 对两个数组元素执行按位“异或”操作 |
| 反转 | 对数组元素进行按位反转 |
| 左移 | 将元素的位向左移动 |
| 右移 | 将元素的位向右移动 |
示例
# 使用别名导入numpy模块
import numpy as np
# 创建两个数组
inputArray_1 = np.array([3, 2, 7, 5])
inputArray_2 = np.array([5, 1, 6, 4])
# 打印两个数组的按位“与”操作
print('两个数组的按位"与"操作:')
print(np.bitwise_and(inputArray_1, inputArray_2))
# 打印两个数组的按位“或”操作
print('两个数组的按位"或"操作:')
print(np.bitwise_or(inputArray_1, inputArray_2))
# 打印两个数组的按位“异或”操作
print('两个数组的按位"异或"操作:')
print(np.bitwise_xor(inputArray_1, inputArray_2))
# 打印输入Array_1的反转或非操作结果
print('输入Array_1的反转或非操作结果:')
print(np.invert(inputArray_1))
# 将inputArray_1的元素左移1位
print('将inputArray_1的元素左移1位')
print(np.left_shift(inputArray_1, 1))
# 将inputArray_1的元素右移2位
print('将inputArray_1的元素右移2位:')
print(np.right_shift(inputArray_1, 2))
输出
在执行时,以上程序将生成以下输出 −
两个数组的按位“与”运算:
[1 0 6 4]
两个数组的按位“或”运算:
[7 3 7 5]
两个数组的按位“异或”运算:
[6 3 1 1]
inputArray_1 的反转/否定:
[-4 -3 -8 -6]
inputArray_1 元素向左移动一位:
[6 4 14 10]
inputArray_1 元素向右移动两位:
[0 0 1 1]
结论
在本文中,我们学习了Python n维数组中的所有通用函数,以及相关示例。
极客教程