我试图找到一个非常大的2D numpy数组的一个维度上的最小数组索引.我发现这很慢(已经尝试过加速瓶颈,这只是一个很小的改进).但是,采用直线最小值似乎要快一个数量级:
import numpy as np
import time
randvals = np.random.rand(3000,160000)
start = time.time()
minval = randvals.min(axis=0)
print "Took {0:.2f} seconds to compute min".format(time.time()-start)
start = time.time()
minindex = np.argmin(randvals,axis=0)
print "Took {0:.2f} seconds to compute argmin".format(time.time()-start)
Run Code Online (Sandbox Code Playgroud)
在我的机器上输出:
Took 0.83 seconds to compute min
Took 9.58 seconds to compute argmin
Run Code Online (Sandbox Code Playgroud)
有没有理由说argmin这么慢?有没有什么方法可以加快到与min相当的速度?
我需要制作一个图表,其功能类似于图上高密度区域的密度图,但低于某个阈值则使用单个点.我找不到任何类似于我在matplotlib缩略图库或谷歌搜索中所需的代码.我有一个我自己编写的工作代码,但它有些棘手,而且(更重要的是)当点/箱的数量很大时,需要花费不可思议的长时间.这是代码:
import numpy as np
import math
import matplotlib as mpl
import matplotlib.pyplot as plt
import pylab
import numpy.random
#Create the colormap:
halfpurples = {'blue': [(0.0,1.0,1.0),(0.000001, 0.78431373834609985, 0.78431373834609985),
(0.25, 0.729411780834198, 0.729411780834198), (0.5,
0.63921570777893066, 0.63921570777893066), (0.75,
0.56078433990478516, 0.56078433990478516), (1.0, 0.49019607901573181,
0.49019607901573181)],
'green': [(0.0,1.0,1.0),(0.000001,
0.60392159223556519, 0.60392159223556519), (0.25,
0.49019607901573181, 0.49019607901573181), (0.5,
0.31764706969261169, 0.31764706969261169), (0.75,
0.15294118225574493, 0.15294118225574493), (1.0, 0.0, 0.0)],
'red': [(0.0,1.0,1.0),(0.000001,
0.61960786581039429, 0.61960786581039429), (0.25,
0.50196081399917603, 0.50196081399917603), (0.5,
0.41568627953529358, 0.41568627953529358), (0.75,
0.32941177487373352, 0.32941177487373352), (1.0,
0.24705882370471954, 0.24705882370471954)]}
halfpurplecmap = mpl.colors.LinearSegmentedColormap('halfpurples',halfpurples,256)
#Create x,y arrays of normally …Run Code Online (Sandbox Code Playgroud)