我试图找到多维绑定。这是我目前掌握的密码。有什么方法能更有效地做到这一点吗?你知道吗
a = np.random.random((3000,3000))
def flinspace(a, b, n, endpoint=True):
a, b = np.asanyarray(a), np.asanyarray(b)
return a[..., None] + (b-a)[..., None]/(n-endpoint) * np.arange(n)
@jit
def fdigitize(x,q,axis=0):
x = np.asanyarray(x).copy()
f,l = np.nanmin(x,axis=axis),np.nanmax(x,axis=axis)
y = flinspace(f,l,q)
for i in range(x.shape[1]):
mask = ~np.isnan(x[:,i]);x[:,i][mask] = np.digitize(x[:,i][mask], y[i])-1
return x
%timeit xx = fdigitize(a,100)
一种解决方案是对x的列应用线性变换,将它们映射到
[0, q-1]
。然后简单地运行np.floor
来获取他们的垃圾箱。 (这与最大值的算法给出的解决方案略有不同,在最大值的算法中,每列的max元素应该属于binq-1
还是q-2
是不一致的)(至少与非jitted代码相比,这提供了一个加速,并在113ms内运行您的示例)
相关问题 更多 >
编程相关推荐