小编mav*_*lan的帖子

Cython的prange没有改善性能

我正在尝试使用Cython来提高某些度量计算的性能prange.这是我的代码:

def shausdorff(float64_t[:,::1] XA not None, float64_t[:,:,::1] XB not None):
    cdef:
        Py_ssize_t i
        Py_ssize_t n  = XB.shape[2]
        float64_t[::1] hdist = np.zeros(n)

    #arrangement to fix contiguity
    XB = np.asanyarray([np.ascontiguousarray(XB[:,:,i]) for i in range(n)])

    for i in range(n):
        hdist[i] = _hausdorff(XA, XB[i])
    return hdist

def phausdorff(float64_t[:,::1] XA not None, float64_t[:,:,::1] XB not None):
    cdef:
        Py_ssize_t i
        Py_ssize_t n  = XB.shape[2]
        float64_t[::1] hdist = np.zeros(n)

    #arrangement to fix contiguity (EDITED)
    cdef float64_t[:,:,::1] XC = np.asanyarray([np.ascontiguousarray(XB[:,:,i]) for i in range(n)])

    with nogil, …
Run Code Online (Sandbox Code Playgroud)

python numpy openmp cython gil

8
推荐指数
1
解决办法
579
查看次数

具有scikit-image local_binary_pattern函数的统一LBP

我正在使用skimage.feature的local_binary_pattern和统一模式,如下所示:

>>> from skimage.feature import local_binary_pattern
>>> lbp_image=local_binary_pattern(some_grayscale_image,8,2,method='uniform')
>>> histogram=scipy.stats.itemfreq(lbp_image)
>>> print histogram
[[  0.00000000e+00   1.57210000e+04]
 [  1.00000000e+00   1.86520000e+04]
 [  2.00000000e+00   2.38530000e+04]
 [  3.00000000e+00   3.23200000e+04]
 [  4.00000000e+00   3.93960000e+04]
 [  5.00000000e+00   3.13570000e+04]
 [  6.00000000e+00   2.19800000e+04]
 [  7.00000000e+00   2.46530000e+04]
 [  8.00000000e+00   2.76230000e+04]
 [  9.00000000e+00   4.88030000e+04]]
Run Code Online (Sandbox Code Playgroud)

当我在附近拍摄8个像素时,预计会获得59个不同的LBP码(因为统一的方法),但它只给了我9个不同的LBP码.更一般地,总是返回P + 1个标签(其中P是邻居的数量).

这是另一种统一的方法,还是我误解了什么?

python feature-extraction scikit-image

6
推荐指数
1
解决办法
7753
查看次数

计算不规则间隔累积点的方法

我试图做相反的事情:给定(连续)强度的2D图像,生成一组不规则间隔的累积点,即不规则地覆盖2D地图的点,在高强度区域彼此更接近(但没有重叠!).

我的第一次尝试是"加权"k-means.由于我没有找到加权k均值的工作实现,我引入权重的方式包括重复高强度的点.这是我的代码:

import numpy as np
from sklearn.cluster import KMeans

def accumulation_points_finder(x, y, data, n_points, method, cut_value):
    #computing the rms
    rms = estimate_rms(data)
    #structuring the data
    X,Y = np.meshgrid(x, y, sparse=False)
    if cut_value > 0.:
        mask = data > cut_value
        #applying the mask
        X = X[mask]; Y = Y[mask]; data = data[mask]
        _data = np.array([X, Y, data])
    else:
        X = X.ravel(); Y = Y.ravel(); data = data.ravel()
        _data = np.array([X, Y, data])

    if method=='weighted_kmeans':
        res = …
Run Code Online (Sandbox Code Playgroud)

python numpy scikit-learn

5
推荐指数
1
解决办法
145
查看次数