[转载] Python笔记:在NumPy中,对ndarray进行算数运算和广播

参考链接: Python中的numpy.divide

对秩为1的两个ndarray进行加减乘除 

import numpy as np

 

# 创建2个秩为1的ndarray

x = np.array([1,2,3,4])

y = np.array([5.1,6.1,7.1,8.1])

 

# 打印x

print('x = ', x)

 

# 打印y

print('y = ', y)

 

# 通过两种不同的方式,对x和y进行加减乘除

print('x + y = ', x + y)

print('add(x,y) = ', np.add(x,y))

print()

print('x - y = ', x - y)

print('subtract(x,y) = ', np.subtract(x,y))

print()

print('x * y = ', x * y)

print('multiply(x,y) = ', np.multiply(x,y))

print()

print('x / y = ', x / y)

print('divide(x,y) = ', np.divide(x,y))

 

输出: 

x =  [1 2 3 4]

y =  [5.1 6.1 7.1 8.1]

x + y =  [ 6.1  8.1 10.1 12.1]

add(x,y) =  [ 6.1  8.1 10.1 12.1]

 

x - y =  [-4.1 -4.1 -4.1 -4.1]

subtract(x,y) =  [-4.1 -4.1 -4.1 -4.1]

 

x * y =  [ 5.1 12.2 21.3 32.4]

multiply(x,y) =  [ 5.1 12.2 21.3 32.4]

 

x / y =  [0.19607843 0.32786885 0.42253521 0.49382716]

divide(x,y) =  [0.19607843 0.32786885 0.42253521 0.49382716]

 

对秩为1的两个ndarray进行加减乘除 

前提条件: ndarray 的形状必须一样或者可广播 

import numpy as np

 

# 创建2个秩为2的相同形状的ndarray

X = np.array([1,2,3,4]).reshape(2,2)

Y = np.array([5.5,6.5,7.5,8.5]).reshape(2,2)

 

# 打印 X

print('X = \n', X)

 

# 打印 Y

print('Y = \n', Y)

 

print()

 

# 进行加减乘除并输出

print('X + Y = \n', X + Y)

print('add(X,Y) = \n', np.add(X,Y))

print()

print('X - Y = \n', X - Y)

print('subtract(X,Y) = \n', np.subtract(X,Y))

print()

print('X * Y = \n', X * Y)

print('multiply(X,Y) = \n', np.multiply(X,Y))

print()

print('X / Y = \n', X / Y)

print('divide(X,Y) = \n', np.divide(X,Y))

 

输出: 

X = 

 [[1 2]

 [3 4]]

Y = 

 [[5.5 6.5]

 [7.5 8.5]]

 

X + Y = 

 [[ 6.5  8.5]

 [10.5 12.5]]

add(X,Y) = 

 [[ 6.5  8.5]

 [10.5 12.5]]

 

X - Y = 

 [[-4.5 -4.5]

 [-4.5 -4.5]]

subtract(X,Y) = 

 [[-4.5 -4.5]

 [-4.5 -4.5]]

 

X * Y = 

 [[ 5.5 13. ]

 [22.5 34. ]]

multiply(X,Y) = 

 [[ 5.5 13. ]

 [22.5 34. ]]

 

X / Y = 

 [[0.18181818 0.30769231]

 [0.4        0.47058824]]

divide(X,Y) = 

 [[0.18181818 0.30769231]

 [0.4        0.47058824]]

 

使用数学函数操作ndarray示例: 

import numpy as np

 

# 创建秩为1的ndarray

x = np.array([1,2,3,4])

 

# 打印x

print('x = ', x)

print()

 

# 以e为底的指数

print('EXP(x) =', np.exp(x))

print()

# 计算平方根

print('SQRT(x) =',np.sqrt(x))

print()

# 计算 平方

print('POW(x,2) =',np.power(x,2))

 

使用统计学函数操作ndarray示例: 

import numpy as np

 

# 创建一个秩为2的ndarray

X = np.array([[1,2], [3,4]])

 

# 打印X

print()

print('X = \n', X)

print()

 

# 使用mean计算X中所有元素中的平均数

print('计算在X中所有元素的平均数:', X.mean())

 

# 使用mean,外加axis参数计算X中列或行的平均数

print('X的所有列中所有元素的平均值:', X.mean(axis=0))

print('X中所有行中所有元素的平均值:', X.mean(axis=1))

print()

# 使用mean,外加axis参数计算X中列或行的总数

print('计算X中所有元素的总和', X.sum())

print('计算X中所有列中元素的总和:', X.sum(axis=0))

print('计算X中所有行中元素的总和:', X.sum(axis=1))

print()

# 标准差

print('计算X中所有元素的标准差:', X.std())

print('计算X中所有列中元素的标准差:', X.std(axis=0))

print('计算X中所有行中元素的标准差:', X.std(axis=1))

print()

print('计算X中所有元素的中位数:', np.median(X))

print('计算X中所有列上元素的中位数:', np.median(X,axis=0))

print('计算X中所有行上元素的中位数:', np.median(X,axis=1))

print()

print('计算X中所有元素的最大值:', X.max())

print('计算X中所有列上元素的最大值:', X.max(axis=0))

print('计算X中所有行上元素的最大值:', X.max(axis=1))

print()

print('计算X中所有元素的最小值:', X.min())

print('计算X中所有列上元素的最小值', X.min(axis=0))

print('计算X中所有行上元素的最小值:', X.min(axis=1))

 

输出: 

X = 

 [[1 2]

 [3 4]]

 

计算在X中所有元素的平均数: 2.5

X的所有列中所有元素的平均值: [2. 3.]

X中所有行中所有元素的平均值: [1.5 3.5]

 

计算X中所有元素的总和 10

计算X中所有列中元素的总和: [4 6]

计算X中所有行中元素的总和: [3 7]

 

计算X中所有元素的标准差: 1.118033988749895

计算X中所有列中元素的标准差: [1. 1.]

计算X中所有行中元素的标准差: [0.5 0.5]

 

计算X中所有元素的中位数: 2.5

计算X中所有列上元素的中位数: [2. 3.]

计算X中所有行上元素的中位数: [1.5 3.5]

 

计算X中所有元素的最大值: 4

计算X中所有列上元素的最大值: [3 4]

计算X中所有行上元素的最大值: [2 4]

 

计算X中所有元素的最小值: 1

计算X中所有列上元素的最小值 [1 2]

计算X中所有行上元素的最小值: [1 3]

 

NumPy 使 ndarray 中的所有元素与单个数字相加,而不使用复杂的循环 

import numpy as np

 

# 创建一个秩为2的ndarray

X = np.array([[1,2], [3,4]])

 

# 打印X

print('X = \n', X)

print()

 

# 整体ndarray 与 单个数进行加减运算

print('3 * X = \n', 3 * X)

print()

print('3 + X = \n', 3 + X)

print()

print('X - 3 = \n', X - 3)

print()

print('X / 3 = \n', X / 3)

 

输出: 

X = 

 [[1 2]

 [3 4]]

 

3 * X = 

 [[ 3  6]

 [ 9 12]]

 

3 + X = 

 [[4 5]

 [6 7]]

 

X - 3 = 

 [[-2 -1]

 [ 0  1]]

 

X / 3 = 

 [[0.33333333 0.66666667]

 [1.         1.33333333]]

 

在上述运算中,NumPy 在后台对 ndarray 广播 3,使它们具有相同的形状。这样我们仅使用一行代码,就可以使 X 的每个元素加 3。 

Numpy 可以对两个形状不同的 ndarray 执行相同的操作 

import numpy as np

 

# 创建一个秩为1的ndarray

x = np.array([1,2,3])

 

# 创建一个秩为2的ndarray

Y = np.array([[1,2,3],[4,5,6],[7,8,9]])

 

# 创建一个秩为1的ndarray,并转换成秩为2的ndarray

Z = np.array([1,2,3]).reshape(3,1)

 

# 输出X

print('x = ', x)

print()

 

# 输出Y

print()

print('Y = \n', Y)

print()

 

# 输出Z

print()

print('Z = \n', Z)

print()

 

print('x + Y = \n', x + Y)

print()

print('Z + Y = \n',Z + Y)

 

输出: 

x =  [1 2 3]

 

 

Y = 

 [[1 2 3]

 [4 5 6]

 [7 8 9]]

 

 

Z = 

 [[1]

 [2]

 [3]]

 

x + Y = 

 [[ 2  4  6]

 [ 5  7  9]

 [ 8 10 12]]

 

Z + Y = 

 [[ 2  3  4]

 [ 6  7  8]

 [10 11 12]]

 

 

关于广播的API: 

https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值