numpy基础(part10)--通用函数

学习笔记,这个笔记以例子为主。
开发工具: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()

图像:

发布了141 篇原创文章 · 获赞 24 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/105191772