由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - numpy 巨慢?
相关主题
为什么Python巨慢无比?有什么语言能取代python作数据处理? R?
大侠们说说C(C++)或Fortran比较Matlab到底优点在哪儿?有人用过octave吗?
Python的问题有没有觉得scipy很稀烂的?
Matlab处理数组一问(0.1+0.05)>0.15返回TRUE
请教python中如何向文件写入矩阵[bssd]汇报一下Julia进展
[合集] scipy还是matlab虚心请教 如何成为Python 大牛
如何自学python请教python
也谈谈语言之争Fortran question: FORMAT(3HXY=3I)
相关话题的讨论汇总
话题: narr话题: numpy话题: mi话题: sum话题: ex
进入Programming版参与讨论
1 (共1页)
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学起的确害人

1 (共1页)
进入Programming版参与讨论
相关主题
Fortran question: FORMAT(3HXY=3I)请教python中如何向文件写入矩阵
Fortran question in PLC?[合集] scipy还是matlab
iphone 4巨慢, 但storage还有1.5G如何自学python
[合集] 如何找出一个32位数中最左边的1?也谈谈语言之争
为什么Python巨慢无比?有什么语言能取代python作数据处理? R?
大侠们说说C(C++)或Fortran比较Matlab到底优点在哪儿?有人用过octave吗?
Python的问题有没有觉得scipy很稀烂的?
Matlab处理数组一问(0.1+0.05)>0.15返回TRUE
相关话题的讨论汇总
话题: narr话题: numpy话题: mi话题: sum话题: ex