学习笔记,这个笔记以例子为主。
开发工具:Spyder
通用函数
数组的剪裁
- 语法
# 将调用数组中小于和大于下限和上限的元素替换为下限和上限,返回裁剪后的数组,调
# 用数组保持不变。
ndarray.clip(min=下限, max=上限)
- 图示
- 举个例子
代码:
import numpy as np
a = np.array([[1, 3, 5],
[2, 4, 6],
[3, 9, 6]])
print(a)
print(a.clip(min = 3, max = 6))
结果:
[[1 3 5]
[2 4 6]
[3 9 6]]
[[3 3 5]
[3 4 6]
[3 6 6]]
数组的压缩
- 语法
# 返回由调用数组中满足条件的元素组成的新数组。
ndarray.compress(条件)
- 例子
代码:
import numpy as np
a = np.array([[1, 3, 5],
[2, 4, 6],
[3, 9, 6]])
print(a)
print(a.compress(a % 3 == 0))
结果:
报错,我们输入的数组必须是一位数组。
代码2:
import numpy as np
a = np.arange(1, 20)
print(a)
print(a.compress(a % 3 == 0))
结果2:
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[ 3 6 9 12 15 18]
备注:and无法进行数组与数组之间的运算。但是我们可以用np.all进行数组之间的与运算。
代码3:
import numpy as np
a = np.arange(1, 20)
print(a)
print(a.compress(np.all([a % 2 == 0, a % 3 == 0],
axis = 0)))
结果3:
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[ 6 12 18]
加法、乘法通用函数
- 语法
# 两数组相加
np.add(a, b)
# a数组元素累加和
np.add.reduce(a)
# 累加和过程
np.add.accumulate(a)
# 外和
np.add.outer([10, 20, 30], a)
# 计算所有元素的乘积
np.prod(a)
#对于有多个维度的数组可以指定轴
#如axis=1指定计算每一行的乘积。
# 返回调用数组中所有元素执行累乘的过程数组。
np.cumprod()
np.outer()
- 例子1(相加、累加和、累加)
代码:
import numpy as np
a = np.arange(1, 7)
b = np.arange(5, 11)
print('a:', a, '\n', 'b:', b)
print('a + b:', np.add(a, b))
print(np.add.reduce(a))
print(np.add.accumulate(a))
结果:
a: [1 2 3 4 5 6]
b: [ 5 6 7 8 9 10]
a + b: [ 6 8 10 12 14 16]
21
[ 1 3 6 10 15 21]
- 例子2(外和)
代码:
import numpy as np
a = np.arange(1, 7)
print(np.add.outer([10, 20, 30], a))
结果:
[[11 12 13 14 15 16]
[21 22 23 24 25 26]
[31 32 33 34 35 36]]
- 例子3(外积)
代码:
import numpy as np
a = np.arange(1, 7)
print(np.outer([10, 20, 30], a))
结果:
[[ 10 20 30 40 50 60]
[ 20 40 60 80 100 120]
[ 30 60 90 120 150 180]]
- 例子4(累乘、累乘和)
代码:
import numpy as np
a = np.arange(1, 7)
print(np.prod(a))
print(np.cumprod(a))
结果:
720
[ 1 2 6 24 120 720]
除法通用函数
- 语法
# a 真除 b (对应位置相除)
np.true_divide(a, b)
# a 真除 b
np.divide(a, b)
# a 地板除 b(真除的结果向下取整)
np.floor_divide(a, b)
np.floor(a / b)
# a 天花板除 b(真除的结果向上取整)
np.ceil(a / b)
# a 截断除 b (真除的结果直接干掉小数部分)
np.trunc(a / b)
#四舍五入
np.round(a / b)
- 例子
代码:
import numpy as np
a = np.array([10, 20, 8, 9, 9])
b = np.array([3, -3, 4, 5, -5])
print(np.divide(a, b))
print(np.floor_divide(a, b))
print(np.ceil(a/b))
print(np.trunc(a/b))
print(np.round(a/b))
结果:
[ 3.33333333 -6.66666667 2. 1.8 -1.8 ]
[ 3 -7 2 1 -2]
[ 4. -6. 2. 2. -1.]
[ 3. -6. 2. 1. -1.]
[ 3. -7. 2. 2. -2.]
三角通用函数
- 语法
numpy.sin()
- 傅里叶定理
法国科学家傅里叶提出,任何一条周期曲线,无论多么跳跃或不规则,都能表示成一组光滑正弦曲线叠加之和。
合成方波
方波长啥样?如下图所示:
一个方波由如下参数的正弦波叠加而成:
曲线叠加的越多,越接近方波。
- 例子(模拟合成方波)
代码:
import numpy as np
import matplotlib.pyplot as mp
x = np.linspace(-2*np.pi, 2*np.pi, 1000)
y = np.zeros(1000)
n = 1000
for i in range(1, n+1):
y += 4 / ((2 * i - 1) * np.pi) \
* np.sin((2 * i - 1) * x)
mp.plot(x, y)
mp.show()
结果:
这里,我们将range(1, n + 1)改为range(1, 4),只绘制3条正弦曲线,并合成:
import numpy as np
import matplotlib.pyplot as mp
x = np.linspace(-2*np.pi, 2*np.pi, 1000)
y = np.zeros(1000)
n = 1000
for i in range(1, 4):
y_temp = 4 / ((2 * i - 1) * np.pi) \
* np.sin((2 * i - 1) * x)
mp.plot(x, y_temp)
y += y_temp
mp.plot(x, y, linestyle = '--'
,linewidth = 4,label = 'Synthetic Wave')
mp.legend(loc = 0)
mp.show()
图像: