Numpy库(二):运算


一、算术运算

Numpy数组的基础运算为矩阵与数字的运算。数组的算术运算是针对数组内部每个独立元素的运算。

(1)加减乘除运算

import numpy as np
a = np.arange(5)
print('原数组:', a)
print('加运算:', a+3)
print('减运算:', a-3)
print('乘运算:', a*3)
print('除运算:', a/3)

输出结果如下:

原数组:[0 1 2 3 4]
加运算:[3 4 5 6 7]
减运算:[-3 -2 -1  0  1]
乘运算:[ 0  3  6  9 12]
除运算:[0.         0.33333333 0.66666667 1.         1.33333333]

(2)乘方、开方、对数运算

Numpy作为一个功能强大的科学计算包,其内置了大量用于科学计算的函数。

import numpy as np
a = np.arange(1,5)
print('原数组  :', a)
print('二阶乘方:', a**2)
print('开方运算:', np.sqrt(a))
print('对数运算:', np.log(a))

输出结果如下:

原数组  :[1 2 3 4]
二阶乘方:[ 1  4  9 16]
开方运算:[1.         1.41421356 1.73205081 2.        ]
对数运算:[0.         0.69314718 1.09861229 1.38629436]

(3)三角运算

import numpy as np
a = np.arange(1,5)
print('原数组  :', a)
print('正弦化  :', np.sin(a))
print('余弦化  :', np.cos(a))
print('正切化  :', np.tan(a))
print('反正弦化:', np.arcsin(a))
print('反余弦化:', np.arccos(a))
print('反正切化:', np.arctan(a))

输出结果如下:

原数组  :[1 2 3 4]
正弦化  :[ 0.84147098  0.90929743  0.14112001 -0.7568025 ]
余弦化  :[ 0.54030231 -0.41614684 -0.9899925  -0.65364362]
正切化  :[ 1.55740772 -2.18503986 -0.14254654  1.15782128]
反正弦化:[1.57079633        nan        nan        nan]
反余弦化:[ 0. nan nan nan]
反正切化:[0.78539816 1.10714872 1.24904577 1.32581766]

其中数据nan用于表示空缺数据,等同于None。此处存在nan数据是由于三角函数的定义域问题导致。

二、统计运算

Numpy数组能够进行布尔运算,通过对各个元素进行布尔条件判断从而返回对应的布尔值。此外,Numpy库内置了一些用于统计运算的函数,用于计算最大值、最小值、中位数、方差等统计量。

(1)布尔运算

import numpy as np
a = np.arange(1,5)
b = a >= 3
print('数组a的值:', a)
print('数组b的值:', b)

输出结果如下:

数组a的值:[1 2 3 4]
数组b的值:[False False  True  True]

通常,将布尔运算后得到的新数组作为角标传给原数组,从而筛选出符合条件的数据。

import numpy as np
a = np.arange(1,5)
b = a[a > 3]
print('数组a的值:', a)
print('符合条件的元素:', b)

输出结果如下:

数组a的值: [1 2 3 4]
符合条件的元素: [4]

(2)统计量运算

import numpy as np
a = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
print('求和    :', np.sum(a))
print('按行求和:', np.sum(a, axis=0))
print('按列求和:', np.sum(a, axis=1))
print('求最大值:', np.max(a))
print('求最小值:', np.min(a))
print('求平均值:', np.mean(a))
print('求中位数:', np.median(a))
print('求方差  :', np.var(a))
print('求标准差:', np.std(a))

输出结果如下:

求和    : 45
按行求和: [12 15 18]
按列求和: [ 6 15 24]
求最大值: 9
求最小值: 1
求平均值: 5.0
求中位数: 5.0
求方差  : 6.666666666666667
求标准差: 2.581988897471611

三、矩阵运算

除了上述两种运算,Numpy库还支持矩阵运算。这使得它能够实现诸多线性代数的计算需求,从而奠定了它重要的地位。

(1)矩阵加减运算

矩阵的加减运算符合线性代数中的规定,两个形状相同的ndarray数组能够进行矩阵加减运算。
矩阵加法

import numpy as np
a = np.array([
    [1, 2, 3],
    [4, 5, 6],
])
b = np.array([
    [1, 2, 3],
    [4, 5, 6],
])
print('矩阵加法:\n', a+b)
print('矩阵减法:\n', a-b)

输出结果如下:

矩阵加法:
 [[ 2  4  6]
 [ 8 10 12]]
矩阵减法:
 [[0 0 0]
 [0 0 0]]

特别的,如果两个运算对象中,有某一个对象为一维数组,则两者进行运算时,将按照维度进行独立的计算。
特殊加法

import numpy as np
a = np.array([
    [1, 2, 3],
    [4, 5, 6],
])
b = np.array([
    [1, 2, 3],
])
print('矩阵加法:\n', a+b)
print('矩阵减法:\n', a-b)

输出结果如下:

矩阵加法:
 [[2 4 6]
 [5 7 9]]
矩阵减法:
 [[0 0 0]
 [3 3 3]]

(2)矩阵的转置与变形

所谓的矩阵转置是指:将矩阵的行和列互相代替;所谓的矩阵变形则是指:在不改变矩阵包含的元素个数(即ndarray的size属性)的条件下,改变矩阵的行数(维度)和列数。
矩阵转置

矩阵变形

import numpy as np
a = np.array([
    [1, 2, 3],
    [4, 5, 6],
])
print('矩阵转置:\n', a.T)
print('矩阵变形:\n', a.reshape(1,a.size//1))

输出结果如下

矩阵转置:
 [[1 4]
 [2 5]
 [3 6]]
矩阵变形:
 [[1 2 3 4 5 6]]

(3)矩阵的乘法

矩阵的乘法符合线性代数中的定义。在Numpy库中,采用函数**dot()**进行矩阵的乘法运算。
矩阵乘法

import numpy as np
a = np.array([
    [1, 2, 3],
    [4, 5, 6],
])
print('矩阵乘法:\n', a.dot(a.T))

输出结果如下:

矩阵乘法:
 [[14 32]
 [32 77]]

(4)矩阵的逆矩阵

设 A 是数域上的一个n阶矩阵,若在相同数域上存在另一个n阶矩阵 B ,使得: AB=BA=E ,则我们称B是A的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵

在Numpy库中,用如下方式能够求出矩阵的逆矩阵:

import numpy as np
a = np.eye(3)
print('原矩阵:\n', a)
print('逆矩阵:\n', np.linalg.inv(a))

输出结果如下:

原矩阵:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
逆矩阵:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值