Contents
1 np.mgrid()
z = np.mgrid[1:5:4j, 1:3:3j]
np.mgrid输出返回一个三维向量;其中的元素z[0]、z[1]都是二维矩阵;
表示1:5切片均匀取数,取4个;1:3切片均匀取数,取3个
print(z)
[[[1. 1. 1. ]
[2.33333333 2.33333333 2.33333333]
[3.66666667 3.66666667 3.66666667]
[5. 5. 5. ]]
[[1. 2. 3. ]
[1. 2. 3. ]
[1. 2. 3. ]
[1. 2. 3. ]]]
2 np.meshgrid()
# 生成网格点坐标矩阵
np.meshgrid(np.arange(-5.5, 1.0, 0.1), np.arange(-3.0, 1.0, 0.1))
表示该网格点的横坐标、纵坐标范围及步长。
3 numpy.ravel() vs numpy.flatten()
// 单词ravel v. 使更复杂; 使更纷乱
首先声明两者所要实现的功能是一致的(将多维数组降为一维),两者的区别在于返回拷贝(copy)还是返回视图(view)。
numpy.flatten()
返回一份拷贝,对拷贝所做的修改不会影响原始矩阵;而numpy.ravel()返回的是视图(view,也颇有几分C/C++引用&
的意味),会影响原始矩阵。
# 两者的功能
>>> x = np.array([[1, 2], [3, 4]])
>>> x.flatten()
array([1, 2, 3, 4])
>>> x.ravel()
array([1, 2, 3, 4]) # 两者默认均是行序优先
>>> x.flatten('F')
array([1, 3, 2, 4])
>>> x.ravel('F')
array([1, 3, 2, 4])
# 两者的区别
>>> x = np.array([[1, 2], [3, 4]])
>>> x.flatten()[1] = 100
>>> x
array([[1, 2],
[3, 4]]) # flatten:返回的是拷贝
>>> x.ravel()[1] = 100
>>> x
array([[ 1, 100],
[ 3, 4]])
4 np.newaxis的作用
np.newaxis的功能为插入新维度:
改变维度的作用往往是将一维的数据转变成一个矩阵,与后面的权重矩阵进行相乘, 否则单单的数据是不能进行矩阵相乘的。
a=np.array([1,2,3,4,5])
print(a.shape) # (5,)
aa=a[:,np.newaxis]
print(aa.shape) # (5, 1)
5 numpy中双冒号 :: 的作用
a = np.array([[1, 2, 3, 1, 3, 5], [4, 5, 6, 2, 4, 3]])
print(a)
print(a[:, 0::2])
[[1 2 3 1 3 5]
[4 5 6 2 4 3]]
[[1 3 3]
[4 6 4]]
b = np.array([[1, 2, 3, 1, 3, 5], [4, 5, 6, 2, 4, 3]])
print(b)
print(b[:, 1::2])
[[1 2 3 1 3 5]
[4 5 6 2 4 3]]
[[2 1 5]
[5 2 3]]
a[:, 0::2]表示取a的第0纬度的所有值,第一纬度从第0列开始,step = 2, 取第0, 2,4列的值;
b[:, 1::2]表示取b的第0纬度的所有值,第一纬度从第1列开始,step = 2, 取第1, 3,5列的值;
[start :: step] 表示从start开始,每隔step取值。
6 np.clip()
np.clip是一个截取函数,用于截取数组中小于或者大于某值的部分,并使得被截取部分等于固定值。
np.clip(a, a_min, a_max, out=None):
该函数的作用是将数组a中的所有数限定到范围a_min和a_max中。
部分参数解释:
a:输入矩阵;
a_min:被限定的最小值,所有比a_min小的数都会强制变为a_min;
a_max:被限定的最大值,所有比a_max大的数都会强制变为a_max;
out:可以指定输出矩阵的对象,shape与a相同
# 一维矩阵
x= np.arange(12)
print(np.clip(x,3,8))
[3 3 3 3 4 5 6 7 8 8 8 8]
# 多维矩阵
y= np.arange(12).reshape(3,4)
print(np.clip(y,3,8))
[[3 3 3 3]
[4 5 6 7]
[8 8 8 8]]
7 numpy中的argsort()排序
argsort函数返回的是数组值从小到大的索引值:
x = np.array([3, 1, 2])
np.argsort(x) #按升序排列
array([1, 2, 0])
np.argsort(-x) #按降序排列
array([0, 2, 1])
x[np.argsort(x)] #通过索引值排序后的数组
array([1, 2, 3])
x[np.argsort(-x)]
array([3, 2, 1])
8 np.prod()函数
np.prod()函数用来计算所有元素的乘积,对于有多个维度的数组可以指定轴,如axis=1指定计算每一行的乘积。
np.prod([4., 2.])
8.0
np.prod([[4., 2.],[4., 3.]], axis=1)
array([8., 12.)
9 numpy.random.seed(seed=None)
在使用numpy时,难免会用到随机数生成器。numpy.random.seed(),随机数种子,每次可以生成相同的随机数。
随机数种子对后面的结果一直有影响。
该参数指定了一个随机数生成的起始位置。每个参数对应一个位置。并且在该参数确定后,其后面的随机数的生成顺序也就确定了;
需要注意的是,seed值的有效次数仅为一次,因此,若要保证每次产生的随机数相同,则需要在调用随机数函数之前再次使用相同的seed值。
所以,随机数种子的参数怎么选择?这个参数只是确定一下随机数的起始位置,可随意分配。