小编Chr*_*den的帖子

排序考试的最佳算法

我是统计学课程的分级生,并以随机顺序给我一系列的纸质作业.我的部分工作是按字母顺序排列它们.我一直在使用类似于快速排序的方法,但其他评分者使用了不同的方法.我需要一种有效的排序方法,并且有正当理由,因为当我进行"大量"考试时,提供了理由.以下是我使用的一些细节:

  • 我有一个名单,其中包含我应该看到的所有名称的按字母顺序排列的列表.
  • 我不在乎让名字更像字母,而不仅仅是第一个字母.例如,如果"史密斯,约翰"出现在"Salk,Jonas"之前,我很好.
  • 我将永远不会排序超过300个对象.

到目前为止,我的方法是查找班级名单中间的最后一个字母(即:如果有60篇论文,选择与第30个人相对应的姓氏字母),将其视为一个支点,并将所有字母放在上面一堆中位数,另一堆中的所有字母.如果一个字母与中位数相同,我将它放在中间桩中.我现在对上/下中位数桩做同样的事情.当堆足够小以至于堆栈中只有三个或四个字母时,我为每个字母创建一个堆栈,然后按字母顺序将堆栈折叠成主堆栈.

是否有专门为字母顺序设计的算法,或平均比我的方法更有效的东西?似乎没有问题的一种方法是为每个字母制作一个堆栈(26堆,最坏的情况),但这会消耗很多空间,以至于一个桌面不可行.

sorting

14
推荐指数
2
解决办法
3230
查看次数

对于需要条件检查的东西,是否有比循环更有效的方法?

我有一个问题,涉及我围绕一些代码包装一个while循环,我认为可以有效地进行矢量化.但是,在每一步中,我的停止条件都依赖于该阶段的值.将此示例视为我的问题的表示模型:使用
生成N(0,1)个随机变量,rnorm()直到您采样大于任意值的值为止k.

编辑:在评论中讨论的我的问题的一个警告是,我不能先验地知道在停止条件之前需要多少样本的近似值.

一种方法:

  1. 使用while循环,采样适当大小的正常随机向量(例如,一次rnorm(50)采样50个标准法线,或者rnorm(1)如果k接近零).检查此向量以查看是否有任何观察值大于k.

  2. 如果是,请停止并返回所有先前的值.否则,将步骤1中的矢量与通过重复步骤1制作的新矢量组合.

另一种方法是为给定的k指定完全过度杀戮的随机抽取数.这可能意味着如果k = 2,则使用样本1,000个正态随机变量rnorm(1000).

利用的R提供在第二种情况下,给出量化的情况相比环版本,其中矫枉过正数量不太多超过必要更大更快的结果,但在我的问题,我没有对我有多少的运行需要一个很好的直觉要做,所以我需要保守.

问题如下:有没有办法像方法2那样进行高度向量化的过程,但是使用方法1之类的条件检查?rnorm(50)当考虑到高度矢量化的方法是元素元素更快,但更浪费时,是否像"最快"方式那样进行小矢量化操作?

loops r

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

并行训练森林

我有一个非常大的数据框,包含790,000行和140个预测变量。其中一些相互之间具有很强的相关性,并且规模不同。有了这个randomForest程序包,我可以只使用一小部分数据在每个核心上生长一个森林,然后使用foreach它们并将其与combine()函数合并以获得一棵大树,如下所示:

rf.STR = foreach(ntree=rep(125, 8), .combine=combine, .multicombine=TRUE, .packages='randomForest') %dopar% {
  sample.idx = sample.int( nrow(dat), size=sample.size, replace=TRUE)
  randomForest(x=dat[sample.idx,-1, with=FALSE], 
               y=dat[sample.idx, retention], ntree=ntree)
  }
Run Code Online (Sandbox Code Playgroud)

不同尺度上的相关变量使我想使用party软件包中的条件随机森林,但是没有combine()关于森林的方法,因此我不确定如何组合多个森林对象来获得一个重要图或一个预测。

有没有办法在较小的数据子集上训练一个大森林,或者制作几个小森林并将它们组合成一个更大的条件森林模型?

parallel-processing r party random-forest

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

使用xtable重写rownames重命名重复项

我希望xtable不要覆盖我重复的rowname条目.考虑以下MWE:

> require(xtable)
> foo <- matrix(0, 2,2)
> rownames(foo) = rep("bar", 2)
> foo
    [,1] [,2]
bar    0    0
bar    0    0
> xtable(foo)
% latex table generated in R 2.15.0 by xtable 1.7-0 package
% Fri Jun 22 13:59:36 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrr}
  \hline
 & 1 & 2 \\ 
  \hline
1 & 0.00 & 0.00 \\ 
  2 & 0.00 & 0.00 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}
Warning message:
In data.row.names(row.names, rowsi, i) :
  some row.names duplicated: 2 --> …
Run Code Online (Sandbox Code Playgroud)

r xtable

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

R中更快的模数或等式检查(或矢量化的好方法)

我一直在运行Project Euler,试图编写计算效率高的程序.考虑问题1:http://projecteuler.net/problem=1.我将范围从1000增加到10,000,000,以突出低效率.

这是我的解决方案:

system.time({
    x <- 1:1E7
    a <- sum(as.numeric(x[x%%3 ==0 | x%%5==0]))
})
 user  system elapsed 
0.980   0.041   1.011
Run Code Online (Sandbox Code Playgroud)

这是朋友写的一些C++代码,用来做同样的事情.

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
 long x = 0;
 for (int i = 1; i < 10000000; i++)
 {
   if (i % 3 == 0)
     x += i;
   else if (i % 5 == 0)
     x += i;
 }
 cout << x;
 return 0;
}
cbaden$ time ./a.out
23333331666668 …
Run Code Online (Sandbox Code Playgroud)

r

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

标签 统计

r ×4

loops ×1

parallel-processing ×1

party ×1

random-forest ×1

sorting ×1

xtable ×1