标签: reduction

R中的序列减少

假设你有一个这样的矢量:

v <- c(1,1,1,2,2,2,2,1,1,3,3,3,3)
Run Code Online (Sandbox Code Playgroud)

怎么能最好地简化为像这样的data.frame?

v.df <- data.frame(value=c(1,2,1,3),repetitions=c(3,4,2,4))
Run Code Online (Sandbox Code Playgroud)

在一个过程语言中,我可能只是迭代循环并按照我的方式构建data.frame,但是在R中使用大型数据集这样的方法是低效的.有什么建议?

sequences r sequence repeat reduction

4
推荐指数
2
解决办法
239
查看次数

使用R对大数据集进行变量/降维

我在R中有一些数据,我的案例有各种变量:

          B T H G S Z
Golf      1 1 1 0 1 0
Football  0 0 0 1 1 0
Hockey    1 0 0 1 0 0
Golf2     1 1 1 1 1 0
Snooker   1 0 1 0 1 1
Run Code Online (Sandbox Code Playgroud)

我还有一个我的预期输出的矢量:

1,2,3,1,4

我想做的是识别无用的变量.在这个例子中,B和Z几乎没有能力对数据进行分类,所以我希望被告知这个事实.

我查看了使用多元线性回归,但是我不想单独输入和操作每个变量/维度,因为在我的数据中它运行成千上万,有数万个案例.

任何有关最佳方法的帮助将不胜感激.

顺便说一下,我不是统计学家,我是软件开发人员,如果术语不正确,请原谅.

variables regression r reduction dimension

4
推荐指数
1
解决办法
4576
查看次数

如何获得 pytorch 张量的独特元素及其首次出现的索引?

假设 2*X(总是 2 行)pytorch 张量:

A = tensor([[ 1.,  2.,  2.,  3.,  3.,  3.,  4.,  4.,  4.],
            [43., 33., 43., 76., 33., 76., 55., 55., 55.]])
Run Code Online (Sandbox Code Playgroud)

torch.unique(A, dim=1)将返回:

tensor([[ 1.,  2.,  2.,  3.,  3.,  4.],
        [43., 33., 43., 33., 76., 55.]])
Run Code Online (Sandbox Code Playgroud)

但我还需要每个独特元素的索引,它们首先出现在原始输入中。在这种情况下,索引应该是这样的:

tensor([0, 1, 2, 3, 4, 6])

# Explanation
# A = tensor([[ 1.,  2.,  2.,  3.,  3.,  3.,  4.,  4.,  4.],
#             [43., 33., 43., 76., 33., 76., 55., 55., 55.]])
#              (0)  (1)  (2)  (3)  (4) …
Run Code Online (Sandbox Code Playgroud)

python indexing reduction pytorch

4
推荐指数
1
解决办法
2392
查看次数

在CUDA中查找最大值

我正在尝试在CUDA中编写代码以查找给定数字集的最大值.

假设您有20个数字,并且内核在2个5个线程的块上运行.现在假设10个线程同时比较前10个值,并且线程2找到最大值,因此线程2正在更新全局存储器中的最大值变量.当线程2正在更新时,将使用旧值进行比较的剩余线程(1,3-10)会发生什么?

如果我使用atomicCAS()锁定全局变量,线程(1,3-10)将使用旧的最大值进行比较吗?我怎样才能克服这个问题?

parallel-processing cuda reduction

3
推荐指数
1
解决办法
1万
查看次数

双减少opencl教程

我是OpenCl的新手.

我需要在一维双精度数组上运算减少(求和运算符).

我一直在网上徘徊,但我发现的例子很混乱.任何人都可以发布易于阅读(并且可能有效)的教程实现吗?

附加信息: - 我可以访问一个GPU设备; - 我使用C作为内核代码

sum reduction opencl

3
推荐指数
1
解决办法
4085
查看次数

将TSP降低到哈密顿电路

如何将旅行商问题的(决定版本)转换为哈密尔顿电路问题(即如何将TSP降低到HCP,如果我有HCP解决方案,那么我将使用该解决方案来解决TSP问题)?

algorithm graph np-complete reduction graph-algorithm

3
推荐指数
1
解决办法
1万
查看次数

CUDA Thrust:基于"key"数组中的值,仅对数组中的某些值进行reduce_by_key

假设我有两个device_vector <byte>数组,d_keys并且d_data.

d_data例如,如果是扁平的2D 3x5阵列(例如{1,2,3,4,5,6,7,8,9,8,7,6,5,4,3})并且d_keys是1D阵列大小为5(例如{1,0,0,1,1}),我如何进行减少,这样如果相应的d_keys值为1 ,我最终只会按行添加值(例如,结束结果为{10,23,14})?

sum_rows.cu例如允许我加入的每一个值d_data,但是这并不完全正确.

或者,我可以在每行的基础上使用a zip_iterator并一次合并d_keys一行d_data,然后执行a transform_reduce,仅在键值为1时添加,但是我必须循环遍历d_data数组.

我真正需要的是某种transform_reduce_by_key不是内置的功能,但肯定必须有一种方法来实现它!

cuda reduction gpu-programming thrust

3
推荐指数
1
解决办法
2178
查看次数

有没有更优雅/聪明/简短的方法来使未知数字接近0?

基本上我正在研究物理游戏.需要减少侧向运动(如接近0,而不是变为负值),但我不知道它在哪个方向,所以我不知道是添加阻力还是减去阻力.

(如果物品向右移动,则具有正向力,向左移动,负向力)

现在我这样做:

if (objects[i]->force.x > 0)
    objects[i]->force.x -= drag;
else
    objects[i]->force.x += drag;
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但我觉得必须有一个更时尚的方式来做到这一点.

找到一种确保它不会超过0的方法也不会有什么坏处

c++ math reduction simplification

3
推荐指数
1
解决办法
793
查看次数

CUDA:在warp reduction和volatile关键字中

从以下链接阅读问题及其答案后

我脑子里还有一个问题.从我在C/C++中的背景; 我知道使用volatile它有它的缺点.并且在答案中指出,在CUDA的情况下,优化可以用寄存器替换共享数组,以volatile在不使用关键字时保留数据.

我想知道在计算(总和)减少时可能遇到的性能问题.例如

__device__ void sum(volatile int *s_data, int tid)
{
    if (tid < 16)
    {
        s_data[tid] += s_data[tid + 16];
        s_data[tid] += s_data[tid +  8];
        s_data[tid] += s_data[tid +  4];
        s_data[tid] += s_data[tid +  2];
        s_data[tid] += s_data[tid +  1];
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用减少经线.由于warp中的所有线程都是同步的,因此我认为不需要使用syncthreads()构造.

我想知道将删除关键字volatile弄乱我的总和(由于cuda优化)?没有volatile关键字可以使用这样的减少.

由于我多次使用此缩减功能,volatile关键字会导致性能下降吗?

c++ cuda reduction

3
推荐指数
1
解决办法
929
查看次数

OpenMP循环为同一个串行循环提供不同的结果

我有一些串行代码:

double* a = malloc((1000000) * sizeof(double));
double* b = malloc((1000000) * sizeof(double));
double totalA = 0;

for (int i = 0; i < 1000000; i++) {

    if (i == 0) {
        a[i] = sin(i);
    }

    b[i] = sin(i+1);

    if (i < 1000000-1) {
        a[i+1] = b[i];
    }

    totalA += a[i];
}
Run Code Online (Sandbox Code Playgroud)

totalA此串行循环后的输出是0.232883978073.

然后我有一个OpenMP版本(注意:所有变量都重新初始化):

double* a = malloc((1000000) * sizeof(double));
double* b = malloc((1000000) * sizeof(double));
double totalA = 0;

#pragma omp parallel for reduction(+:totalA)
for (int …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing multicore openmp reduction

3
推荐指数
1
解决办法
1158
查看次数