小编Ton*_*ass的帖子

Iterative Fork-Join用于分治的基本情况

我有一个递归的分治算法,在开始分割之前需要两个计算密集的基本案例任务.最初的基本案例是独立的任务,所以我想并行完成.在基本情况之后,除法运行相同的任务,在0和1之间输入不同的输入,并根据输出决定是否再次拆分.我通过创建一个伪造递归的任务包装器对象来使基本案例工作,但这感觉就像一个kludge,如下所示:

public static void doSomething () {
    ForkJoinPool pool = new ForkJoinPool();
    private ArrayList<Object> al = new ArrayList<Object>();
    TaskWrapper tw = new TaskWrapper(true,-1);

    al.addAll(pool.invoke(tw));
}

@SuppressWarnings("serial")
public static class TaskWrapper extends RecursiveTask<ArrayList<Object>> {
    private ArrayList<Object> al = new ArrayList<Object>();
    private boolean arg;
    private double input;
    private Object out;

    TaskWrapper(boolean ar, double in){
        arg = ar;
        input = in;
    }

    @Override
    public ArrayList<Object> compute() {
        if (arg == false) {
            out = new Object(runIntensiveTask(input));
            al.add(out);
        }
        else {
            // Right Base …
Run Code Online (Sandbox Code Playgroud)

java multithreading java.util.concurrent fork-join forkjoinpool

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

2-D矩阵:查找和删除作为其他列子集的列

我有一个问题要在逻辑矩阵中标识和删除作为其他列子集的列。即[1,0,1]是[1,1,1]的子集;但是[1,1,0]和[0,1,1]都不是彼此的子集。我写了一段快速的代码来标识作为子集的列,并使用一对嵌套的for循环进行(n ^ 2-n)/ 2检查。

import numpy as np
A = np.array([[1, 0, 0, 0, 0, 1],
              [0, 1, 1, 1, 1, 0],
              [1, 0, 1, 0, 1, 1],
              [1, 1, 0, 1, 0, 1],
              [1, 1, 0, 1, 0, 0],
              [1, 0, 0, 0, 0, 0],
              [0, 0, 1, 1, 1, 0],
              [0, 0, 1, 0, 1, 0]])
rows,cols = A.shape
columns = [True]*cols
for i in range(cols):
    for j in range(i+1,cols):
        diff = A[:,i]-A[:,j]
        if all(diff >= 0):
            print …
Run Code Online (Sandbox Code Playgroud)

python numpy matrix vectorization scipy

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

Python Numpy向量化嵌套的for循环用于组合

给定一个nxn实数数组A,我试图找到2-d数组三行的所有组合的按元素最小值的最大值中的最小值。使用for循环,结果如下所示:

import numpy as np

n = 100
np.random.seed(2)
A = np.random.rand(n,n)
global_best = np.inf

for i in range(n-2):
    for j in range(i+1, n-1):
        for k in range(j+1, n):
            # find the maximum of the element-wise minimum of the three vectors
            local_best = np.amax(np.array([A[i,:], A[j,:], A[k,:]]).min(0))
            # if local_best is lower than global_best, update global_best
            if (local_best < global_best):
                global_best = local_best
                save_rows = [i, j, k]

print global_best, save_rows
Run Code Online (Sandbox Code Playgroud)

对于n = 100,输出应为:

Out[]: 0.492652949593 [6, 41, 58] …
Run Code Online (Sandbox Code Playgroud)

python numpy matrix vectorization combinatorics

6
推荐指数
3
解决办法
627
查看次数

在Python中向量化平方欧几里德距离的掩码

我正在运行代码以生成B中位置的掩码,该掩码比D中的位置更接近A中的位置。

N = [[0 for j in range(length_B)] for i in range(length_A)]    
dSquared = D*D

for i in range(length_A):
    for j in range(length_B):
        if ((A[j][0]-B[i][0])**2 + (A[j][1]-B[i][1])**2) <= dSquared:
            N[i][j] = 1
Run Code Online (Sandbox Code Playgroud)

对于长度为数万个位置的A和B的列表,此代码需要一些时间。我很确定有办法矢量化它,但是可以使其运行得更快。谢谢。

python numpy vectorization scipy euclidean-distance

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

从逻辑矩阵到集合列表的最快方法

我需要将一个稀疏逻辑矩阵转换为一组列表,其中每个list [i]都包含具有针对column [i]的非零值的行的集合。以下代码有效,但我想知道是否有更快的方法来执行此操作。我正在使用的实际数据约为6000x6000,并且比此示例稀疏得多。

import numpy as np

A = np.array([[1, 0, 0, 0, 0, 1],
              [0, 1, 1, 1, 1, 0],
              [1, 0, 1, 0, 1, 1],
              [1, 1, 0, 1, 0, 1],
              [1, 1, 0, 1, 0, 0],
              [1, 0, 0, 0, 0, 0],
              [0, 0, 1, 1, 1, 0],
              [0, 0, 1, 0, 1, 0]])

rows,cols = A.shape

C = np.nonzero(A)
D = [set() for j in range(cols)]

for i in range(len(C[0])):
    D[C[1][i]].add(C[0][i])

print D
Run Code Online (Sandbox Code Playgroud)

python numpy set matrix scipy

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