文章目录
-
前言
一、数组运算
二、数组广播
三.数组与标量间的运算
- 总结
前言
Numpy数组不需要遍历循环,即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化运算。不过。如果两个数组的大小(ndarray.shape)不同,则它们进行算术运算时会出现广播机制。除此之外,数组还支持使用运算符与标量进行运算,本文章将针对数组运算进行详细的介绍。
一、数组运算
在numpy数组中,大小相等的数组之间的任何算术运算都会应用到元素级,即只用于位置相同的元素之间,所得的运算结果组成一个新的数组,接下来通过一张示意图来描述什么时矢量运算
0 | 1 | 2 | 3 |
+
4 | 5 | 6 | 7 |
=
4 | 6 | 8 | 10 |
数组arr1与arr2对齐后,会让相同位置的元素相加得到一个新的数组。其中得到的数组中的每个元素为操作数相加的结果,并且结果的位置跟操作数的位置是相同的,大小形同的数组之间的算术运算,示例代码如下。
import numpy as np
data1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
data2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(data1+data2)
# 运行结果为:
"""[[ 2 4 6]
[ 8 10 12]
[14 16 18]]
"""
print(data1-data2)
# 运行结果为:
"""[[0 0 0]
[0 0 0]
[0 0 0]]
"""
print(data1*data2)
# 运行结果为:
"""[[ 1 4 9]
[16 25 36]
[49 64 81]]
"""
print(data1/data2)
# 运行结果为:
"""[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
"""
二、数组广播
数组在进行矢量运算时,要求数组的形状是相等的,当形状不相等的数组执行矢量运算的时候,就会出现广播机制,该机制会对数组进行扩展,使得数组的shape属性值一样,这样就可以进行矢量化运算了,下面来看一个例子:
代码如下(示例):
import numpy as np
arr1 = np.array(([0],[1],[2],[3]))
print(arr1.shape)
# 运行结果为(4,1)
arr2 = np.array([1,2,3])
print(arr2.shape)
# 运行结果为(3,)
print(arr1+arr2)
# 运行结果为:
"""
[[1 2 3]
[2 3 4]
[3 4 5]
[4 5 6]]
"""
上述代码中数组arr1的shape是(4,1),arr2的shape(3,),这两个数组是进行相加,按照广播机制会对数组arr1和arr2进行扩展,使得数组都变成(4,3)
arr1拓展后的结果为:
0 | 0 | 0 |
1 | 1 | 1 |
2 | 2 | 2 |
3 | 3 | 3 |
arr2扩展后的结果为:
1 | 2 | 3 |
1 | 2 | 3 |
1 | 2 | 3 |
1 | 2 | 3 |
三.数组与标量间的运算
大小相等的数组之间的任何算术运算都会将运算运用到元素级,同样,数组与标量的算术运算也会将那个标量值传播传播到各个元素,当对数组进行相加,相减,乘以或者除以一个数字时这些称为标量运算 。标量运算会产生一个与数组具有相同数量的行和列的新矩阵,其原始矩阵的每个元素都被相加,相减,相乘或者相除。
数组与标量之间的代码,示例如下
import numpy as np
data1 = np.array([[1,2,3],[4,5,6]])
data2 = 10
print(data1+data2)
print(data1-data2)
print(data1*data2)
print(data1/data2)
# 对应的运算结果为
"""
[[11 12 13]
[14 15 16]]
[[-9 -8 -7]
[-6 -5 -4]]
[[10 20 30]
[40 50 60]]
[[0.1 0.2 0.3]
[0.4 0.5 0.6]]
"""
总结
以上就是今天要讲的内容,本文仅仅简单介绍了numpy中数组运算的使用,包括数组之间的运算,数组的广播机制,数组与标量之间的运算。