i***r 发帖数: 1035 | 1 我有个10万行的matrix用来测试 全是0,1,2。
看起来大概这样
1 2 1 2 2 1 2 2 1 2 2 1 2 0 0 0 2 1
我要找多少个2,多少个1或者2
for line in f:
arr = line.split()
mi = arr.count('2')
ex = len(arr) - arr.count('0')
print('{:.4f}'.format(mi/ex))
用numpy:
for line in f:
narr = numpy.array( line.split(), dtype=int )
mi = sum( narr == 2 )
ex = sum( narr != 0 )
print('{:.4f}'.format(mi/ex))
上面的code 14秒完成,下面的10分钟了还在跑。。。 | V*********r 发帖数: 666 | 2 http://mail.scipy.org/pipermail/numpy-discussion/2006-September
`mi=numpy.sum(narr==2)`, or `mi=(narr==2).sum()`
Here `narr==2` is a numpy array.
So you'd better use numpy's own sum() method.
Similarly, when counting non-zero elements, use
`(narr!=0).sum()`, or a dedicated/faster version
`numpy.count_nonzero(narr)`
【在 i***r 的大作中提到】 : 我有个10万行的matrix用来测试 全是0,1,2。 : 看起来大概这样 : 1 2 1 2 2 1 2 2 1 2 2 1 2 0 0 0 2 1 : 我要找多少个2,多少个1或者2 : for line in f: : arr = line.split() : mi = arr.count('2') : ex = len(arr) - arr.count('0') : print('{:.4f}'.format(mi/ex)) : 用numpy:
| m********5 发帖数: 17667 | 3 那是当然
你用的sum是python stl, 不是numpy.sum; 它会先把numpy.array()变成stl.list然后
再sum, 当然巨慢, 这位仁兄最好重头学一下python, 直接捣鼓numpy是不行的
学编程从MATLAB学起的确害人
【在 i***r 的大作中提到】 : 我有个10万行的matrix用来测试 全是0,1,2。 : 看起来大概这样 : 1 2 1 2 2 1 2 2 1 2 2 1 2 0 0 0 2 1 : 我要找多少个2,多少个1或者2 : for line in f: : arr = line.split() : mi = arr.count('2') : ex = len(arr) - arr.count('0') : print('{:.4f}'.format(mi/ex)) : 用numpy:
| n****1 发帖数: 1136 | 4 numpy是用来做浮点运算的, 譬如逆矩阵, 找eigenvalue. 你这个应用只牵涉到整点的
比较/运算, 与numpy八竿子打不着关系, 怎么可能快? | i***r 发帖数: 1035 | 5 多谢,试下你的方法
【在 V*********r 的大作中提到】 : http://mail.scipy.org/pipermail/numpy-discussion/2006-September : `mi=numpy.sum(narr==2)`, or `mi=(narr==2).sum()` : Here `narr==2` is a numpy array. : So you'd better use numpy's own sum() method. : Similarly, when counting non-zero elements, use : `(narr!=0).sum()`, or a dedicated/faster version : `numpy.count_nonzero(narr)`
| i***r 发帖数: 1035 | 6 现在正在学,也算是从头学。
有什么建议和推荐也欢迎。
这些东西书本上一时半会也学不来
【在 m********5 的大作中提到】 : 那是当然 : 你用的sum是python stl, 不是numpy.sum; 它会先把numpy.array()变成stl.list然后 : 再sum, 当然巨慢, 这位仁兄最好重头学一下python, 直接捣鼓numpy是不行的 : 学编程从MATLAB学起的确害人
|
|