在仿真的过程中,总有一些方法不复杂,但是自己写就很耗时,而且每次都要去查。因此就专门开一个博客来记录下,调用第三方包中的一些快捷方法。如果有更好的方法可以在评论里留言,我会实时更新的。
import numpy as np
minval = np.min(a[np.nonzero(a)])
maxval = np.max(a[np.nonzero(a)])
这部分来自我的另一个博客Numpy 100道练习题,这部分持续在更新,可以关注。
这里有两个函数np.repeat
和np.tile
,这两者的区别在于前者操作的层面是元素,后者操作的层面是轴。
np.repeat(a, repeats, axis)
:
a
:表示操作对象,可以是元素也可以是数组repeats
:表示复制的次数,可以对数组的每一维(层)的复制次数进行分别制定,例如repeats=(2,3)
就是数组的第一维复制两次,第二维复制三次。但是此时需要制定沿哪个轴进行复制。通常repeats
的值是一个数,此时得到的结果就是一维数组,每个元素都复制一样的次数。
注意这里的 维和
axis
中的维度不是一个对象。
axis
:复制的轴向,axis=0
为第一维度(行),axis=1
为第二维度(列)。需要注意的是,如果是三维的话,第一维度不是行,是层,第二维度是行,第三维度是列。对于多维数组的排序,最简单的方式就是数中括号的层数和顺序。
Z = np.array([[1, 2], [3, 4]])
np.repeat(Z, (2, 1), axis=0)
得到:
array([[1, 2],
[1, 2],
[3, 4]])
Z = np.array([[1, 2], [3, 4]])
np.repeat(Z, 2)
得到:
array([1, 1, 2, 2, 3, 3, 4, 4])
Z = np.array([[1, 2], [3, 4]])
np.repeat(Z, 2, axis=1)
得到:
array([[1, 1, 2, 2],
[3, 3, 4, 4]])
np.tile(A, repeats)
:
A
:复制的数组repeats
:复制次数,这个与np.repeat
不同的是,这里的复制不再按照元素来考虑,而是当做整体,如果repeats
是一个数字,就是沿着默认的第一维度(行)复制,如果是(a,b)
就是沿着第一维度(行)复制a
次,沿着第二维度(列)复制b
次。Z = np.array([[1, 2], [3, 4]])
np.tile(Z, 2)
得到:
array([[1, 2, 1, 2],
[3, 4, 3, 4]])
Z = np.array([[1, 2], [3, 4]])
np.tile(Z, (2,3))
得到:
array([[1, 2, 1, 2, 1, 2],
[3, 4, 3, 4, 3, 4],
[1, 2, 1, 2, 1, 2],
[3, 4, 3, 4, 3, 4]])
具体用法参考:scipy.spatial.distance.cdist,这里举个简单的例子,
import numpy as np
from scipy.spatial.distance import cdist
Z = np.random.random((10,2))
dist_mat = cdist(Z, Z)
以后别再傻傻地去百度各种常量了,直接调用就行。
常量表参考:Constants (scipy.constants)。
直角坐标系和极坐标系的想换转化,虽然可以自己写,但我懒。不过可以通过实数和复数的转化来实现。
from cmath import polar, rect
from math import degrees, atan
x, y = 1, 1 # * 设置直角坐标系下的坐标
z = complex(x, y) # * complex是自带函数,不用导入
pz = polar(z) # * 转为极坐标,得到二元组,前者是边长,后者是弧度
# * 弧度转角度,并进行对比
degrees(atan(1))
degrees(pz[1])
# * 极坐标转直角坐标
rz = rect(pz[0], pz[1]) # * 转为支教坐标,得到二元组,前者是横坐标,后者是纵坐标
这部分参考:python坐标转化极坐标_python极坐标和直角坐标的转换-CSDN。