Python Numpy的一些操作可以极大的加快你的code运行速度

如果你在进行大矩阵运算的时候,想必大家最想用的肯定是python的numpy数据格式把。但是以前的我,只会用for循环(反正只要达到目的),但是当你有个几十w行的feature,每个有几千维的时候,那真是要处理无数无数无数无数天啊!!!于是,经导师的一番“刺激”后,小肚决定用:矩阵运算大发提高运算速率。效果显著!能提高180倍。So,我之前是干嘛了?[微博狗的表情]


—————–踩坑无数,总结了这篇系统的文章,如果喜欢,欢迎大家浏览—————

1. 最大最小值

np.max(X, axis=0)   #每一列的最大值
np.min(X, axis=0)   #每一列的最小值
np.max(X, axis=1)   #每一行的最大值
np.min(X, axis=1)   #每一行的最小值

######从这里总结出,axis=0是对列的处理,axis=1是对行的处理,缺省时时对所有的元素进行最大最小值求取。对以后的函数也是这样的####

2. 改变numpy的行列数目

X.reshape((m,n))   #将X变成m行n列的矩阵。但是X.shape[0]*X.shape[1] = m*n (针对二维数组而言,其他的也要保证重塑后元素的个数不会改变)

3. 复制numpy的行或者列

X.repeat(m, axis=0) #将X按列进行复制m行。即如果X是(x1, y1),则复制后变为(x1*m, y1)。即把(x1, y1)复制m遍“放在下面”。
X.repeat(m, axis=1) #将X按行进行复制m列。即如果X是(x1, y1),则复制后变为(x1, y1*m)。即把(x1, y1)复制m遍“放在右边”。
#axis缺省时时将X的每一个元素复制m次,并按照“先行后列”的顺序拉为1维。
e.g. a = np.array([[1,2,3],[4,5,6]])
     a.repeat(2) = array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6])

4. numpy转置

X.transpose()

5. L2 L1norm

np.linalg.norm(X, ord=1, axis=1) #ord=1表示是L1 norm,ord=2表示是L2norm,axis=1表示是对行进行norm,axis=0表示是对列进行norm,缺省时对所有的进行norm。

6. 求均值和方差,标准差

np.mean(X, axis=1) #axis=1表示是对行进行求均值,axis=0表示是对列进行求均值,缺省时对所有的元素求均值。
np.std(X, axis=1) #axis=1表示是对行进行标准差求取,axis=0表示是对列进行标准差求取,缺省时对所有的元素求均值。
np.var(X, axis=1) #axis=1表示是对行进行方差求取,axis=0表示是对列进行方差求取,缺省时对所有的元素求均值。

7. 求内积

np.dot(X, Y) #其中X=(m,n), Y=(n,z)必须保证X的列数和Y的行数相同

8. 判断元素在不在numpy中

if num in X:    #num是不是在X中
if num in X[1,0:5]:    #num是不是在X的第一列的前5个元素中

9. numpy排序
由于我的目的就是将每一行中的元素分别按照从大到小的顺序排序,所以我用第二个函数就好。这里不细讲其他的排序方法,详情请见我参考的博客

np.argsort(X, axis=1) #对X的每一行中的元素“分别”进行排序,返回的是从小到大的元素的位置信息。axis=0时是对X的每一列中的元素“分别”进行排序,缺省时axis=1
np.argsort(-X, axis=1) #返回的是从大到小的元素的位置信息。

猜你喜欢

转载自blog.csdn.net/zhangxinyu11021130/article/details/76736038