科学计算库Numpy库(2.数组之间的运算)

文章目录

  • 前言

    一、数组运算

    二、数组广播

    三.数组与标量间的运算

  • 总结


前言

Numpy数组不需要遍历循环,即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化运算。不过。如果两个数组的大小(ndarray.shape)不同,则它们进行算术运算时会出现广播机制。除此之外,数组还支持使用运算符与标量进行运算,本文章将针对数组运算进行详细的介绍。


一、数组运算

在numpy数组中,大小相等的数组之间的任何算术运算都会应用到元素级,即只用于位置相同的元素之间,所得的运算结果组成一个新的数组,接下来通过一张示意图来描述什么时矢量运算

arr1
0123

                                                                              +

arr2
4567

                                                                               =

46810

数组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拓展后的结果为:

000
111
222
333

arr2扩展后的结果为: 

123
123
123
123

三.数组与标量间的运算

大小相等的数组之间的任何算术运算都会将运算运用到元素级,同样,数组与标量的算术运算也会将那个标量值传播传播到各个元素,当对数组进行相加,相减,乘以或者除以一个数字时这些称为标量运算 。标量运算会产生一个与数组具有相同数量的行和列的新矩阵,其原始矩阵的每个元素都被相加,相减,相乘或者相除。

数组与标量之间的代码,示例如下

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中数组运算的使用,包括数组之间的运算,数组的广播机制,数组与标量之间的运算。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值