python对numpy数组求导_NumPy数组计算——python

本文介绍了Python中使用NumPy库对数组进行各种数学运算,包括加、减、乘、除、负数、指数、对数等基本运算,以及绝对值、三角函数、指数与对数等高级运算。此外,还提到了数组的求导操作,这对于数值计算和科学计算非常重要。

一、通用函数运算

(一),数组的运算

对于一个数组,可以直接用加+,减-,乘*,除/,逻辑非,指数运算符 **,其结果就是数组里面每一个元素运算的结果。

(二),NumPy实现的算术运算符

1、加法运算:np.add()

>>> x1 = np.arange(9.0).reshape((3, 3))

[[0. 1. 2.]

[3. 4. 5.]

[6. 7. 8.]]

>>> x2 = np.arange(3.0)

[0. 1. 2.]

>>> np.add(x1, x2)

array([[ 0., 2., 4.],

[ 3., 5., 7.],

[ 6., 8., 10.]])

这个例子是每一列对应相加。

2、np.subtract() 减法运算

>>> x1 = np.arange(9.0).reshape((3, 3))

[[0. 1. 2.]

[3. 4. 5.]

[6. 7. 8.]]

>>> x2 = np.arange(3.0)

[0. 1. 2.]

>>> np.subtract(x1, x2)

array([[ 0., 0., 0.],

[ 3., 3., 3.],

[ 6., 6., 6.]])

每列对应相减。

3、np.negative() 负数运算

>>> np.negative([1.,-1.])

array([-1., 1.])

4、np.multiplt() 乘法运算

>>> x1 = np.arange(9.0).reshape((3, 3))

[[0. 1. 2.]

[3. 4. 5.]

[6. 7. 8.]]

>>> x2 = np.arange(3.0)

[0. 1. 2.]

>>> np.multiply(x1, x2)

array([[ 0., 1., 4.],

[ 0., 4., 10.],

[ 0., 7., 16.]])

每列元素对应相乘。

5、np.divide() 除法运算

>>> x = np.arange(5)

>>> np.true_divide(x, 4)

array([ 0. , 0.25, 0.5 , 0.75, 1. ])

>>> from __future__ import division

>>> x/4

array([ 0. , 0.25, 0.5 , 0.75, 1. ])

>>> x//4

array([0, 0, 0, 0, 1]

6、np.floor_divide() 地板除法运算

>>> np.floor_divide(7,3)

2

>>> np.floor_divide([1., 2., 3., 4.], 2.5)

array([ 0., 0., 1., 1.])

即向下取整。

7、np.power() 指数运算

>>> x1 = range(6)

>>> x1

[0, 1, 2, 3, 4, 5]

>>> np.power(x1, 3)

array([ 0, 1, 8, 27, 64, 125])

>>> x2 = [1.0, 2.0, 3.0, 3.0, 2.0, 1.0]

>>> np.power(x1, x2)

array([ 0., 1., 8., 27., 16., 5.])

8、np.mod() 模/余数

>>> np.remainder([4, 7], [2, 3])

array([0, 1])

>>> np.remainder(np.arange(7), 5)

array([0, 1, 2, 3, 4, 0, 1])

(三)、绝对值

1、abs() ——python内置函数

2、np.absoute() 或者 np.abs()

(四)、三角函数

1、np.sin()

>>> np.sin(np.array((0., 30., 45., 60., 90.)) * np.pi / 180. )

array([ 0. , 0.5 , 0.70710678, 0.8660254 , 1. ])

2、np.cos()

>>> np.cos(np.array([0, np.pi/2, np.pi]))

array([ 1.00000000e+00, 6.12303177e-17, -1.00000000e+00])

>>> # Example of ValueError due to provision of shape mis-matched `out`

>>> np.cos(np.zeros((3,3)),np.zeros((2,2)))

Traceback (most recent call last):

File "", line 1, in

ValueError: operands could not be broadcast together with shapes (3,3) (2,2)

3、np.tan()

>>> from math import pi

>>> np.tan(np.array([-pi,pi/2,pi]))

array([ 1.22460635e-16, 1.63317787e+16, -1.22460635e-16])

(五)、指数与对数

1、指数

np.exp(x)      e 的x次

np.exp2(x)     2的x次、

np.power(x, y)     x 的 y 次

2、对数

np.log(x)    以e为底

np.log2(x)    以2位底

np.log10(x)    以10为底

二、高级通用函数

1、指定输出:

>>>x = np.arange(5)

>>>y = np.empty(5)

>>>np.multiply(x, 10, out=y)

array([ 0., 10., 20., 30., 40.])

指定 y 为输出数组

2、聚合——reduce()

>>> np.multiply.reduce([2,3,5])

30

详情看官方文档。

3、外积——outer()

>>>x = np.arange(1, 6)

>>>np.multiply.outer(x, x)

array([[ 1, 2, 3, 4, 5],

[ 2, 4, 6, 8, 10],

[ 3, 6, 9, 12, 15],

[ 4, 8, 12, 16, 20],

[ 5, 10, 15, 20, 25]])

numpy数组元素周围的操作可以通过以下几种方式实现: 1. 切片操作:可以使用numpy数组的切片操作来获取数组中元素的周围元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下切片操作: ```python arr[i-1:i+2, j-1:j+2] ``` 这将返回一个3x3的子数组,其中心元素为arr[i,j],周围的8个元素为该子数组的其余元素。 2. 使用numpy.pad()函数:numpy.pad()函数可以用来在数组的边缘添加一个或多个值,从而扩展数组的大小。可以使用该函数来添加额外的行和列,然后通过索引访问周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python padded_arr = np.pad(arr, ((1, 1), (1, 1)), mode='constant') surrounding = padded_arr[i:i+3, j:j+3] ``` 这将在数组的边缘添加一行和一列,并使用常量值填充这些额外的元素。然后可以使用切片操作来获取中心元素周围的元素。 3. 使用numpy.roll()函数:numpy.roll()函数可以用来沿着给定轴滚动数组的元素。可以使用该函数来将数组的行和列进行滚动,从而获取周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python rows, cols = arr.shape row_indices = np.arange(i-1, i+2) % rows col_indices = np.arange(j-1, j+2) % cols surrounding = arr[row_indices][:, col_indices] ``` 这将将第i行向上和向下滚动一行,并将第j列向左和向右滚动一列,从而获取中心元素周围的元素。使用模运算可以确保在数组的边缘滚动时正确处理索引。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值