小编Nea*_*hes的帖子

Python/Cython中的快速n维稀疏数组

我有一个涉及非常稀疏的大型n维数组的应用程序.scipy.sparse有一个有用的'矢量化获取和设置'功能,因此可以使用Cython快速填充稀疏矩阵.

当然,scipy包不能处理n维.我发现有两个包在python sparray和.d中进行n维稀疏数组ndsparse.然而,它似乎既没有矢量化的获取和设置功能.

所以我需要:

  • 带有矢量化get和set或的n维数组的python包
  • 用于稀疏数组的ac库,我可以使用Cython或
  • 一些'滚动你自己'选项,我想这将需要交替相当于一个python dict

为了我的目的,我认为将n维坐标映射回1或2维可能有效.更好的是有一个dict等价物,我可以在Cython循环内快速访问.我认为这排除了python dict.

想知道是否有人可以给我一个如何在Cython中使用c ++地图对象的例子?

python sparse-array cython sparse-matrix

22
推荐指数
1
解决办法
1718
查看次数

在cython中缓慢分裂

为了在cython中获得快速划分,我可以使用编译器指令

@cython.cdivision(True)
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为得到的c代码没有零分割检查.但是由于某些原因,它实际上使我的代码变慢.这是一个例子:

@cython.boundscheck(False)
@cython.wraparound(False)
@cython.nonecheck(False)
@cython.cdivision(True)
def example1(double[:] xi, double[:] a, double[:] b, int D):

    cdef int k
    cdef double[:] x = np.zeros(D)

    for k in range(D):
        x[k] = (xi[k] - a[k]) / (b[k] - a[k]) 

    return x

@cython.boundscheck(False)
@cython.wraparound(False)
@cython.nonecheck(False)
def example2(double[:] xi, double[:] a, double[:] b, int D):

    cdef int k
    cdef double[:] x = np.zeros(D)

    for k in range(D):
        x[k] = (xi[k] - a[k]) / (b[k] - a[k]) 

    return x

def test_division(self):

    D = 10000
    x …
Run Code Online (Sandbox Code Playgroud)

python cython

13
推荐指数
1
解决办法
5511
查看次数

从随机样本(python)构建一个近似均匀的网格

我想从采样数据构建网格.我可以使用机器学习 - 聚类算法,如k-means,但我想限制中心大致均匀分布.

我想出了一种使用scikit-learn最近邻搜索的方法:随机选择一个点,删除半径为r的所有点然后重复.这很好用,但想知道是否有人有更好(更快)的方法.

在回应评论时,我尝试了两种替代方法,一种方法变得慢得多,另一种方法大致相同......

方法0(我的第一次尝试):

def get_centers0(X, r): 

    N = X.shape[0]
    D = X.shape[1]
    grid = np.zeros([0,D])
    nearest = near.NearestNeighbors(radius = r, algorithm = 'auto')

    while N > 0:
        nearest.fit(X)
        x = X[int(random()*N), :]
        _, del_x = nearest.radius_neighbors(x)
        X = np.delete(X, del_x[0], axis = 0)
        grid = np.vstack([grid, x])
        N = X.shape[0]

    return grid
Run Code Online (Sandbox Code Playgroud)

方法1(使用预先计算的图表):

def get_centers1(X, r): 

    N = X.shape[0]
    D = X.shape[1]
    grid = np.zeros([0,D])
    nearest = near.NearestNeighbors(radius = r, algorithm = 'auto')
    nearest.fit(X)
    graph = nearest.radius_neighbors_graph(X) …
Run Code Online (Sandbox Code Playgroud)

python cluster-analysis machine-learning scikit-learn

7
推荐指数
2
解决办法
1004
查看次数