python 判断矩阵中每行非零个数的方法
如下所示:
#-*-coding:utf-8-*- #@Time:2018/5/1715:05 #@Author:Sizer #@Site: #@File:test.py #@Software:PyCharm importtime importnumpyasnp #data=np.array([ #[5.0,3.0,4.0,4.0,0.0], #[3.0,1.0,2.0,3.0,3.0], #[4.0,3.0,4.0,3.0,5.0], #[3.0,3.0,1.0,5.0,4.0], #[1.0,5.0,5.0,2.0,1.0] #]) data=np.random.random((1000,1000)) print(data.shape) start_time=time.time() #avg=[float(np.mean(data[i,:]))foriinrange(data.shape[0])] #print(avg) start_time=time.time() avg=[] foriinrange(data.shape[0]): sum=0 cnt=0 forrxindata[i,:]: ifrx>0: sum+=rx cnt+=1 ifcnt>0: avg.append(sum/cnt) else: avg.append(0) end_time=time.time() print("op1:",end_time-start_time) start_time=time.time() avg=[] isexist=(data>0)*1 foriinrange(data.shape[0]): sum=np.dot(data[i,:],isexist[i,:]) cnt=np.sum(isexist[i,:]) ifcnt>0: avg.append(sum/cnt) else: avg.append(0) end_time=time.time() print("op2:",end_time-start_time) # #print(avg) factor=np.mat(np.ones(data.shape[1])).T #print("facotr:") #print(factor) exist=np.mat((data>0)*1.0) #print("exist:") #print(exist) #print("res:") res=np.array(exist*factor) end_time=time.time() print("op3:",end_time-start_time) start_time=time.time() exist=(data>0)*1.0 factor=np.ones(data.shape[1]) res=np.dot(exist,factor) end_time=time.time() print("op4:",end_time-start_time)
经过多次验证,第四种实现方式的事件效率最高!
以上这篇python判断矩阵中每行非零个数的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。