NumPy入门学习(二)矢量运算和广播运算

N维数组对象nadarray核心的两个对象:矢量运算和广播运算。

一、矢量运算

将两个形状完全一样的数组与元素之间逐个相加,有两种方法:1、for-in循环实现;2、NumPy的运算表达式实现。

1. for-in循环实现数组运算

list_4x3_a = [[1,1,1],[2,2,2],[3,3,3],[4,4,4]]
list_4x3_b = [[5,5,5],[5,5,5],[5,5,5],[5,5,5]]
list_4x3_c = [[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

for i in range(4):
    for j in range(3):
        list_4x3_c[i][j] = list_4x3_a[i][j] + list_4x3_b[i][j]

print(list_4x3_c)
[[6, 6, 6], [7, 7, 7], [8, 8, 8], [9, 9, 9]]

2. NumPy的运算表达式实现

NumPy的矢量特性主要表现为并行化的运算,也就是说在对数组执行运算时会做用到元素级别。

import numpy as np
array_4x3_a = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]]) 
array_4x3_b = np.array([[5,5,5],[5,5,5],[5,5,5],[5,5,5]])
print(array_4x3_a+array_4x3_b)
[[6 6 6]
 [7 7 7]
 [8 8 8]
 [9 9 9]]

二、 广播运算的特性

对于不同大小的数组之间的运算,在NumPy中提供了对应的处理机制,那就是广播特性。

NumPy的广播特性放宽了对数组形状的限制,使得较小的数组可以“广播”到教的数组相同的形状尺度上,使它们能够对等地进行数学计算。最简单的广播场景是一个数组和一个标量运算,标量值会传播到数组的各个元素中。

import numpy as np
array_4x3_a = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])

print(array_4x3_a+5)
[[6 6 6]
 [7 7 7]
 [8 8 8]
 [9 9 9]]

当两个数组进行计算时,NumPy会逐元素地比较他们的形状,从末尾的维度向前执行。只有当它们相等,或者其中一个为1,两个维度才算是兼容的。相兼容的两个数组运算后的结果与各维度上最大尺寸相同。

1. 相兼容的

import numpy as np
array_4x3 = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])
array_1x3 = np.array([1,2,3])
print(array_4x3 + array_1x3)
[[2 3 4]
 [3 4 5]
 [4 5 6]
 [5 6 7]]

2. 不兼容的

import numpy as np
array_4x3 = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])
array_2x1 = np.array([[1],[1]])
print(array_4x3 + array_2x1)
ValueError: operands could not be broadcast together with shapes (4,3) (2,1)

正确形式如下:

import numpy as np
array_4x3 = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])
array_4x1 = np.array([[1],[1],[1],[1]])
print(array_4x3 + array_4x1)
[[2 2 2]
 [3 3 3]
 [4 4 4]
 [5 5 5]]

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值