给定具有m行和n列的矩阵,每个列都被排序.如何有效地整理整个矩阵?
我知道一个在O(mn log(min(m,n))中运行的解决方案.我正在寻找更好的解决方案.
我知道的方法一次基本上需要2行/列并应用合并操作.
这是一个例子:
[[1,4,7,10],
[2,5,8,11],
[3,6,9,12]]
Run Code Online (Sandbox Code Playgroud)
是输入martix,它对每一行和每列进行排序.
预期产出是:
[1,2,3,4,5,6,7,8,9,10,11,12]
Run Code Online (Sandbox Code Playgroud)
另一个例子:
[[1, 2, 3, 3, 4, 5, 6, 6, 7, 7],
[1, 2, 4, 6, 7, 7, 8, 8, 9,10],
[3, 3, 4, 8, 8, 9,10,11,11,12],
[3, 3, 5, 8, 8, 9,12,12,13,14]]
Run Code Online (Sandbox Code Playgroud) 我只需要能够将一个对象转换为可以为空的枚举.对象可以是enum,null或int.谢谢!
public enum MyEnum { A, B }
void Put(object value)
{
System.Nullable<Myenum> val = (System.Nullable<MyEnum>)value;
}
Put(null); // works
Put(Myenum.B); // works
Put(1); // Invalid cast exception!!
Run Code Online (Sandbox Code Playgroud) 我当然知道data.table对象的主要目的是允许快速子集化/分组等,并且拥有一个大的data.table子集(非常有效)比拥有许多(可能很小的)data.table对象更有意义.
话虽这么说,我最近创建了一个实例化大量data.table对象的脚本,我注意到随着内存数量的增加,性能会下降data.table's.
这是我的意思的一个例子:
n <- 10000
# create a list containing 10k data.frame's
system.time(lotsofDFs <- lapply(1:n,FUN=function(i){ data.frame(A=1:10,B=1:10,ID=i)}),gcFirst=T)
# user system elapsed
# 2.24 0.00 2.23
# create a list containing 10k data.table's
system.time(lotsofDTs <- lapply(1:n,FUN=function(i){ data.table(A=1:10,B=1:10,ID=i)}),gcFirst=T)
# user system elapsed
# 5.49 0.01 5.53
n <- 80000
# create a list containing 80k data.frame's
system.time(lotsofDFs <- lapply(1:n,FUN=function(i){ data.frame(A=1:10,B=1:10,ID=i)}),gcFirst=T)
# user system elapsed
# 19.42 0.01 19.53
# create a list …Run Code Online (Sandbox Code Playgroud) 我在R面临一个奇怪的问题.
请考虑以下代码(实际代码的真正简化版本,但仍然存在问题):
library(timeSeries)
tryCatch(
{
specificWeekDay <- 2
currTs <- timeSeries(c(1,2),c('2012-01-01','2012-01-02'),
format='%Y-%m-%d',units='A')
# just 2 dates out of range
start <- time(currTs)[2]+100*24*3600
end <- time(currTs)[2]+110*24*3600
# this line returns an empty timeSeries
currTs <- window(currTs,start=start,end=end)
message("Up to now, everything is OK")
# this is the line with the uncatchable error
currTs[!(as.POSIXlt(time(currTs))$wday %in% specificWeekDay),] <- NA
message("I'm after the bugged line !")
},error=function(e){message(e)})
message("End")
Run Code Online (Sandbox Code Playgroud)
当我在RGui中运行该代码时,我正确地得到以下输出:
到目前为止,
在为函数'[< - '选择方法时评估参数'i'时一切正常错误:as.POSIXlt.numeric(time(currTs))中的错误:必须提供'origin'
结束
相反,当我使用以下行通过RScript(在Windows中)运行它时:
RScript.exe --vanilla "myscript.R"
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
到目前为止,一切正常
执行中断
似乎RScript崩溃了......
有什么想法吗?
这是一个timeSeries包错误,还是我做错了什么?
如果是后者,那么确保捕获所有错误的正确方法是什么? …
我希望与多个线程并行运行命令行程序的某些部分,我担心可能会有一些静态变量,我必须修复(例如通过制作它[ThreadStatic]).在我的项目中是否有任何工具或简单的方法可以找到这些?
当然,简单地搜索"static"并没有多大帮助:我有很多静态方法可以很好地工作并且可以使用任意数量的线程
我需要将矢量中的连续NA减少到单个NA,而不触及其他值.
所以,例如,给定一个这样的向量:
NA NA 8 7 NA NA NA NA NA 3 3 NA -1 4
Run Code Online (Sandbox Code Playgroud)
我需要得到的是以下结果:
NA 8 7 NA 3 3 NA -1 4
Run Code Online (Sandbox Code Playgroud)
目前,我正在使用以下功能:
reduceConsecutiveNA2One <- function(vect){
enc <- rle(is.na(vect))
# helper func
tmpFun <- function(i){
if(enc$values[i]){
data.frame(L=c(enc$lengths[i]-1, 1), V=c(TRUE,FALSE))
}else{
data.frame(L=enc$lengths[i], V=enc$values[i])
}
}
Df <- do.call(rbind.data.frame,lapply(1:length(enc$lengths),FUN=tmpFun))
return(vect[rep.int(!Df$V,Df$L)])
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但可能有一个更简单/更快的方法来完成这项任务.
有什么建议 ?
提前致谢.
我有一个包含单行的DataTable.我想将此DataTable值转换为字符串数组,以便我可以通过字符串数组索引访问该DataTable的列值.例如,如果我的DataTable如下所示
| Name | Address | Age |
-------------------------------
| jim | USA | 23 |
Run Code Online (Sandbox Code Playgroud)
我想将Datatable中的值存储到我的字符串数组中,以便MyStringArray [1]给我一个值USA.
提前致谢
对于启发式算法,我需要一个接一个地评估某个集合的组合,直到达到停止标准.
由于它们很多,目前我使用以下内存高效迭代器块(灵感来自python itertools.combinations)生成它们:
public static IEnumerable<T[]> GetCombinations<T>(this IList<T> pool, int r)
{
int n = pool.Count;
if (r > n)
throw new ArgumentException("r cannot be greater than pool size");
int[] indices = Enumerable.Range(0, r).ToArray();
yield return indices.Select(idx => pool[idx]).ToArray();
while (true)
{
int i;
for (i = r - 1; i >= 0; i--)
if (indices[i] != i + n - r)
break;
if (i < 0)
break;
indices[i] += 1;
for (int j = i + 1; j …Run Code Online (Sandbox Code Playgroud) 我有一个朋友要我为他实施一些东西.让我们举一个简单的例子:我输入了四个值:Value1到Value4.使用这些值,我的R程序可以进行花哨的计算,并给出了很好的结果.
不,让我说我不想打扰我的朋友(从他的角度来看)复杂的r脚本并在那里输入值.所以我想编写一个简单的输入gui,然后将其作为可执行文件.现在我有两个问题:
我怎样才能创建这样的输入gui?
如何从中获取可执行文件?
我看过这个和这个,我有以下问题,看看我是否理解正确.鉴于代码
using System;
namespace returnObject
{
class myObject
{
public int number { get; set; }
}
class Program
{
static void Main(string[] args)
{
myObject mainObj = make();
mainObj.number = 7;
}
public static myObject make()
{
myObject localObj = new myObject();
localObj.number = 4;
return localObj;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望localObj在make方法结束时超出范围,因此,obj.number在main函数中设置为7会失败.它没有.我认为我说的是正确的:
localObj 是对象的引用localObj 在堆栈上创建 localObj 在make方法结束时超出范围. localObj引用的对象在堆上.所以,我正确地认为通常所localObj引用的对象在make方法结束时被垃圾收集器标记为删除但是由于引用值已被传递回mainObj,因此该对象被引用,因此不符合条件删除?
另外是以这种方式创建对象的好习惯吗?
c# ×5
r ×4
performance ×2
.net ×1
algorithm ×1
combinations ×1
data.table ×1
enums ×1
executable ×1
linq ×1
nullable ×1
static ×1
try-catch ×1