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判断矩阵中每行非零个数的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。