如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# -*- coding: utf-8 -*- # @Time : 2018/5/17 15:05 # @Author : Sizer # @Site : # @File : test.py # @Software: PyCharm import time import numpy as np # 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, :])) for i in range(data.shape[0])] # print(avg) start_time = time.time() avg = [] for i in range (data.shape[ 0 ]): sum = 0 cnt = 0 for rx in data[i, :]: if rx > 0 : sum + = rx cnt + = 1 if cnt > 0 : avg.append( sum / cnt) else : avg.append( 0 ) end_time = time.time() print ( "op 1:" , end_time - start_time) start_time = time.time() avg = [] isexist = (data > 0 ) * 1 for i in range (data.shape[ 0 ]): sum = np.dot(data[i, :], isexist[i, :]) cnt = np. sum (isexist[i, :]) if cnt > 0 : avg.append( sum / cnt) else : avg.append( 0 ) end_time = time.time() print ( "op 2:" , 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 ( "op 3:" , 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 ( "op 4:" , end_time - start_time) |
经过多次验证, 第四种实现方式的事件效率最高!
以上这篇python 判断矩阵中每行非零个数的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/m0_37890477/article/details/80352041