我正在尝试使用以下代码(test.c)"mmap"二进制文件(~8Gb).
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define handle_error(msg) \
do { perror(msg); exit(EXIT_FAILURE); } while (0)
int main(int argc, char *argv[])
{
const char *memblock;
int fd;
struct stat sb;
fd = open(argv[1], O_RDONLY);
fstat(fd, &sb);
printf("Size: %lu\n", (uint64_t)sb.st_size);
memblock = mmap(NULL, sb.st_size, PROT_WRITE, MAP_PRIVATE, fd, 0);
if (memblock == MAP_FAILED) handle_error("mmap");
for(uint64_t i = 0; i < 10; i++)
{
printf("[%lu]=%X ", i, memblock[i]);
}
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
test.c是使用 …
我有这个功能:
char* ReadBlock(fstream& stream, int size)
{
char* memblock;
memblock = new char[size];
stream.read(memblock, size);
return(memblock);
}
Run Code Online (Sandbox Code Playgroud)
每次我必须从文件中读取字节时,都会调用该函数.我认为每次使用它都会分配新的内存,但是一旦我处理了数组内的数据,我怎么能释放内存呢?我可以从功能外部做到吗?通过分配大块处理数据比分配和删除小块数据提供更好的性能?
非常感谢您的帮助!
我必须应对一个丑陋的名单ul,看起来像这样:
[[1]]
[[1]]$param
name value
"Section" "1"
[[1]]$param
name value
"field" "1"
[[1]]$param
name value
"final answer" "1"
[[1]]$param
name value
"points" "-0.0"
[[2]]
[[2]]$param
name value
"Section" "1"
[[2]]$param
name value
"field" "2"
[[2]]$param
name value
"final answer" "1"
[[2]]$param
name value
"points" "1.0"
[[3]]
[[3]]$param
name value
"Section" "1"
[[3]]$param
name value
"field" "3"
[[3]]$param
name value
"final answer" "0.611"
[[3]]$param
name value
"points" "1.0"
Run Code Online (Sandbox Code Playgroud)
我想将列表转换为简单的数据框,即
Section field final answer points
1 1 1 -0.0
1 …Run Code Online (Sandbox Code Playgroud) 让我们在一列中有一个包含长字符串的数据帧:
df<-data.frame(short=rnorm(10,0,1),long=replicate(10,paste(rep(sample(letters),runif(1,5,8)),collapse="")))
Run Code Online (Sandbox Code Playgroud)
如何在不显示整个字符串的情况下打印数据帧?像这样的东西:
short long
1 0.2492880 ghtaprfv...
2 1.0168434 zrbjxvci...
3 0.2460422 yaghkdul...
4 0.1741522 zuabgxpt...
5 -1.1344230 mzhjtwcr...
6 -0.7104683 fcbhuegt...
7 0.2749227 aqyezhbl...
8 -0.4395554 azecsbnk...
9 2.2837716 lkgwzedf...
10 0.7695538 omiewuyn...
Run Code Online (Sandbox Code Playgroud) 我正在使用RMongoDB,我需要使用查询的值填充空data.frame.结果很长,约有2百万个文件(行).
在我进行性能测试时,我发现将值写入一行的时间会增加数据帧的维度.也许这是一个众所周知的问题,我是最后一个注意到它的人.
一些代码示例:
set.seed(20140430)
nreg <- 2e3
dfres <- as.data.frame(matrix(rep(NA,nreg*7),nrow=nreg,ncol=7))
system.time(dfres[1e3,] <- c(1:5,"a","b"))
summary(replicate(10,system.time(dfres[sample(1:nreg,1),] <- c(1:5,"a","b"))[3]))
nreg <- 2e6
dfres <- as.data.frame(matrix(rep(NA,nreg*7),nrow=nreg,ncol=7))
system.time(dfres[1e3,] <- c(1:5,"a","b"))
summary(replicate(10,system.time(dfres[sample(1:nreg,1),] <- c(1:5,"a","b"))[3]))
Run Code Online (Sandbox Code Playgroud)
在我的机器上,2百万行data.frame的分配大约需要0.4秒.如果我想填充整个数据集,这是很多时间.这里进行第二次模拟以得出问题.
nreg <- seq(2e1,2e7,length.out=10)
te <- NULL
for(i in nreg){
dfres <- as.data.frame(matrix(rep(NA,i*7),nrow=i,ncol=7))
te <- c(te,mean(replicate(10,{r <- sample(1:i,1); system.time(dfres[r,] <- c(1:5,"a","b"))[3]}) ) )
}
plot(nreg,te,xlab="Number of rows",ylab="Avg. time for 10 random assignments [sec]",type="o")
#rm(nreg,dfres,te)
Run Code Online (Sandbox Code Playgroud)

问题:为什么会这样?是否有更快的方法来填充内存中的data.frame?
我想要一个提升线程睡眠几纳秒.以下代码是一个无错误编译的示例.但是,它没有按预期工作,我无法弄清楚原因.
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time.hpp>
//Building options:
//-DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG -lboost_date_time-mt -lboost_thread-mt
void replay()
{
boost::posix_time::time_duration time1, time2;
time1=boost::posix_time::seconds(3);
std::cout << boost::posix_time::to_simple_string(time1) << std::endl;
boost::this_thread::sleep(time1);
time2=boost::posix_time::nanoseconds(987654321);
std::cout << boost::posix_time::to_simple_string(time2) << std::endl;
boost::this_thread::sleep(time2);
}
int main(int argc, char* argv[])
{
boost::thread replaythread(replay);
replaythread.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG是为了使用纳秒(更多信息)所需的预处理器定义.当我设置-DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG构建选项时出现问题,然后boost :: this_thread :: sleep对任何posix :: time_duration都不起作用.创建的线程使用所有CPU,它不会休眠或处理剩余的指令.如果删除预处理器定义,则线程可以在任何时间段内休眠,除非boost :: posix_time :: nanoseconds.该程序使用一些time_duration变量来存储纳秒,这使得boost :: this_thread :: sleep不起作用.
非常感谢您的宝贵时间
让我们想象一下,我们想用收入,年轻人,城市和地区作为回归者来模拟美国州立公立学校的支出(教育).欲了解更多信息:?Anscombe
模型:教育〜(收入+年轻人+城市)*地区
library(car)
library(leaps)
#Loading Data
data(Anscombe)
data(state)
stateinfo <- data.frame(region=state.region,row.names=state.abb)
datamodel <- data.frame(merge(stateinfo,Anscombe,by="row.names"),row.names=1)
head(datamodel)
region education income young urban
AK West 372 4146 439.7 484
AL South 112 2337 362.2 584
AR South 134 2322 351.9 500
AZ West 207 3027 387.5 796
CA West 273 3968 348.4 909
CO West 192 3340 358.1 785
#Saturated Model
MOD1 <- lm(education~(.-region)*region,datamodel)
summary(MOD1)
#anova(MOD1)
#Look for the "best" model
MOD1.subset <- regsubsets(education~(.-region)*region,datamodel,nvmax=15)
plot(MOD1.subset)
Run Code Online (Sandbox Code Playgroud)
具有3个变量和1个交互(教育〜收入+年轻+城市+ RegionWest:年轻)的模型似乎是BIC方面的最佳模型.
coef(MOD1.subset,4)
Run Code Online (Sandbox Code Playgroud)
问题是,如何在不编写公式的情况下从该模型中获取ML对象?
在发布之前,我发现了包HH,它为regsubsets对象提供了一些有趣的功能,例如 …
目标:给出两点,找到连接它们的弧的坐标并绘制它.
实现:一个函数用于查找弧的点(circleFun),另一个用于绘制它(plottest).颜色显示路径的方向,从红色到绿色.
circleFun <- function(x,y)
{
center <- c((x[1]+y[1])/2,(x[2]+y[2])/2)
diameter <- as.numeric(dist(rbind(x,y)))
r <- diameter / 2
tt <- seq(0,2*pi,length.out=1000)
xx <- center[1] + r * cos(tt)
yy <- center[2] + r * sin(tt)
res <- data.frame(x = xx, y = yy)
if((x[1]<y[1] & x[2]>y[2]) | (x[1]>y[1] & x[2]<y[2])){
res <- res[which(res$x>min(c(x[1],y[1])) & res$y>min(c(x[2],y[2]))),]
} else {
res <- res[which(res$x<max(c(x[1],y[1])) & res$y>min(c(x[2],y[2]))),]
}
return(res)
}
plottest <- function(x1,y1)
{
plot(c(x1[1],y1[1]),c(x1[2],y1[2]),
xlim=c(-2,2),ylim=c(-2,2),col=2:3,pch=20,cex=2,asp=1)
lines(circleFun(x1,y1))
}
par(mfrow=c(2,2)) …Run Code Online (Sandbox Code Playgroud) Databricks 文档展示了如何从 UI 中的 JDBC/ODBC 选项卡获取集群的主机名、端口、HTTP 路径和 JDBC URL 参数。看图片:

(来源:databricks.com)
有没有办法以编程方式获取相同的信息?我的意思是使用 Databricks API 或 Databricks CLI。HTTP path我对包含Workspace Id 的内容特别感兴趣。
以下代码使用晶格的线框功能绘制3个彩色平面.但是,我无法理解为什么图例不会通过设置颜色组而改变.我尝试手动完成,但我最终只更改了文本颜色.顺便问一下,有没有人也知道如何使表面透明70%?
library(lattice)
library(akima)
SurfaceData <- data.frame(
x=rep(seq(0,100,length.out=10),each=10,times=3),
y=rep(rep(seq(0,100,length.out=10),times=10),times=3),
z=c(rep(25,100),seq(30,70,length.out=100),seq(95,75,length.out=100)),
type=factor(rep(c("A","B","C"),each=100))
)
wireframe(z~x*y,data=SurfaceData,group=type,
col.groups=c("red","green","blue"),
scales = list(arrows=FALSE, col="black",font=10),
xlab = list("Variable X",rot=30),
ylab = list("Variable Y",rot=-30),
zlab = list("Variable Z",rot=90),
zlim = c(0,100),
#auto.key=TRUE,
auto.key=list(text=c("A","B","C"),col=c("red","green","blue"),lines=TRUE),
par.settings = list(axis.line = list(col = "transparent")),
)
Run Code Online (Sandbox Code Playgroud)
结果:

谢谢!
假设我们有一个长度为5的JSON数组,我们想使用linux命令行工具将该数组拆分为多个长度为2的数组,并将分组的项目保存到不同的文件中。
我使用jq和split工具进行了尝试(对于可以从bash脚本执行的任何方法,我都很满意):
$ echo '[{"key1":"value1"},{"key2":"value2"},{"key3":"value3"},{"key4":"value4"},{"key5":"value5"}]' | jq -c -M '.[]' | split -l 2 -d -a 3 - meta_
$ tail -n +1 meta_*
==> meta_000 <==
{"key1":"value1"}
{"key2":"value2"}
==> meta_001 <==
{"key3":"value3"}
{"key4":"value4"}
==> meta_002 <==
{"key5":"value5"}
Run Code Online (Sandbox Code Playgroud)
前面的命令将项目正确保存到文件中,但是我们需要将它们转换为有效的JSON数组格式。我对--filter选项感到厌倦:
$ echo '[{"key1":"value1"},{"key2":"value2"},{"key3":"value3"},{"key4":"value4"},{"key5":"value5"}]' | jq -c -M '.[]' | split -l 2 -d -a 3 - meta2_ --filter='jq --slurp -c -M'
[{"key1":"value1"},{"key2":"value2"}]
[{"key3":"value3"},{"key4":"value4"}]
[{"key5":"value5"}]
$ tail -n +1 meta2_*
tail: cannot open 'meta2_*' for reading: …Run Code Online (Sandbox Code Playgroud) 对于那些使用reshape包进行练习的人来说,这似乎是一个显而易见的问题,但我正在尝试使用它的功能,而我无法弄清楚正确的语法!
我们有以下数据框,
df <- data.frame(matrix(1:12,ncol=3),row.names=letters[1:4])
X1 X2 X3
a 1 5 9
b 2 6 10
c 3 7 11
d 4 8 12
Run Code Online (Sandbox Code Playgroud)
我们如何将行绑定到列中以获得以下结果?
X1.a X2.a X3.a X1.b X2.b X3.b X1.c X2.c X3.c X1.d X2.d X3.d
1 5 9 2 6 10 3 7 11 4 8 12
Run Code Online (Sandbox Code Playgroud)
谢谢
我有这个数据帧
DFtest <- data.frame(Zone=rep(c("R1","R2","R3"),each=2),
Type=rep(c("C1","C2"),3),
N1=sample(1:6),
N2=sample(seq(0,1,length.out=6)),
N3=sample(letters[1:6]))
DFtest
Zone Type N1 N2 N3
1 R1 C1 2 0.4 c
2 R1 C2 5 1.0 a
3 R2 C1 4 0.6 e
4 R2 C2 3 0.2 d
5 R3 C1 1 0.0 b
6 R3 C2 6 0.8 f
Run Code Online (Sandbox Code Playgroud)
我想将因子类型转换为列,将列N1到N3转换为因子.期望的最终结果应如下所示:
Zone Ns Type.C1 Type.C2
1 R1 N1 2 5
2 R1 N2 0.4 1.0
3 R1 N3 c a
4 R2 N1 4 3
5 R2 N2 0.6 0.2 …Run Code Online (Sandbox Code Playgroud)