小编Lam*_*thy的帖子

从C++调用matlab

我试图从.cpp文件中调用matlab.我使用以下命令编译 engdemo.cpp包含的内容"engine.h"

g++ engdemo.cpp -I/usr/local/matlabR2010a/extern/include -L/usr/local/matlabR2010a/extern/lib -o engdemo
Run Code Online (Sandbox Code Playgroud)

我得到的是以下内容:

engdemo.cpp:(.text+0xdb): undefined reference to `engOpen'
engdemo.cpp:(.text+0x12d): undefined reference to `mxCreateDoubleMatrix'
engdemo.cpp:(.text+0x143): undefined reference to `mxGetPr'
engdemo.cpp:(.text+0x175): undefined reference to `engPutVariable'
engdemo.cpp:(.text+0x189): undefined reference to `engEvalString'
Run Code Online (Sandbox Code Playgroud)

...

collect2:ld返回1退出状态


我想这可能是一些链接问题,但我不确定.请帮帮我.提前谢谢了!

c++ matlab matlab-engine

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

使用fread与foreach和doParallel在R中

我用freadforeachdoParallel在Ubuntu 14.04包中的R 3.2.0.以下代码工作正常,即使我没有使用registerDoParallel.

library(foreach)
library(doParallel)
library(data.table)

write.csv(iris,'test.csv',row.names=F)

cl<-makeCluster(4)

tmp<-foreach(i=1:10) %dopar% { t <- fread('test.csv') }

tmp<-rbindlist(tmp)

stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

但是,当切换到Windows 7时,无论是否有"registerDoParallel",它都不再有效.

library(foreach)
library(doParallel)
#library(doSNOW)
library(data.table)

write.csv(iris,'test.csv',row.names=F)

cl<-makeCluster(4) 
registerDoParallel(cl)
#registerDoSNOW(cl)

tmp<-foreach(i=1:10) %dopar% { t <- fread('test.csv') }

tmp<-rbindlist(tmp)

stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

'doSNOW'包也不起作用.以下是错误消息.

Error in { : task 1 failed - "could not find function "fread""
Run Code Online (Sandbox Code Playgroud)

有没有人有类似的经历?


后续问题是关于嵌套的foreach.以下似乎不起作用.

cl<-makeCluster(4)
registerDoParallel(cl)
clusterEvalQ(cl , library(data.table))

tmp<-foreach(j=1:10) %dopar% {

            tmp1<-foreach(i=1:10) %dopar% {
                          t<-fread('test.csv',data.table=T)
                   }  
            rbindlist(tmp1)
      }
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

r parallel-foreach doparallel

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

当数据量很大时,dcast 无法转换字符列

我正在使用包中的dcast函数 library(reshape2)来投射一个简单的三列表格

df = data.table(id  = 1:1e6, 
             var = c('continent','subcontinent',...), 
             val = c('America','Caribbean',...)````
Run Code Online (Sandbox Code Playgroud)

bydcast(df, id ~ var, value.var ='val')并自动将值转换为计数,即

id     continent   subcontinent
 1     1           1
 2     1           1
Run Code Online (Sandbox Code Playgroud)

但是,如果我将大小减少到 10000 行,它会正确输出

id     continent   subcontinent
 1     America     Caribbean
 2     Europe      West Europe
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我需要以某种方式更改代码?请帮忙。谢谢!

r dcast

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

标签 统计

r ×2

c++ ×1

dcast ×1

doparallel ×1

matlab ×1

matlab-engine ×1

parallel-foreach ×1