Julia是否有内置命令来查找向量最小值的索引?例如,R有一个which.min命令(which.max当然还有一个命令).
显然,我自己可以写下面的内容,但不必这样做会很好.
function whichmin( x::Vector )
i = 1
min_x=minimum(x)
while( x[i] > min_x )
i+=1
end
return i
end
Run Code Online (Sandbox Code Playgroud)
如果以前曾经问过这个问题,我会道歉,但我找不到它.谢谢!
观察
对于中等大小的矩阵,从R到C++传递矩阵的开销对于arma::mat类型而言比对NumericMatrix类型要慢得多.喜欢长约250倍.这是一个最小的例子
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
double test_nm( NumericMatrix X ) {
return 0.0 ;
}
// [[Rcpp::export]]
double test_arma( mat X ) {
return 0.0 ;
}
// [[Rcpp::export]]
double test_nm_conv( NumericMatrix X ) {
mat X_arma = as<mat>( X ) ;
return 0.0 ;
}
Run Code Online (Sandbox Code Playgroud)
然后,在R:
XX <- matrix( runif( 10000 ), 2000, 50 )
microbenchmark( test_nm( XX ), test_arma( XX ), ( XX ) ) …Run Code Online (Sandbox Code Playgroud) 我在读取R数据文件时从gzip收到错误.我正在尝试使用此处描述的方法:在Julia中读取和写入RData文件.
这是一个最小的例子.在R中,我运行以下脚本:
var1 <- matrix( runif(9), 3, 3 )
save( var1, file='~/temp/file1.rda')
Run Code Online (Sandbox Code Playgroud)
然后在朱莉娅:
using DataFrames
x = read_rda("~/temp/file1.rda")
Run Code Online (Sandbox Code Playgroud)
返回:
ERROR: GZip.GZError(-1,"gzopen failed")
in gzopen at /home/squipbar/.julia/v0.4/GZip/src/GZip.jl:250
in gzopen at /home/squipbar/.julia/v0.4/GZip/src/GZip.jl:265
in read_rda at /home/squipbar/.julia/v0.4/DataFrames/src/RDA.jl:418
Run Code Online (Sandbox Code Playgroud)
我不认为我做任何蠢事.我在网上发现的最接近错误的是RDatasets github问题,这里:https://github.com/johnmyleswhite/RDatasets.jl/issues/32
那么也许这与RDatasets有某种关系?建议非常欢迎.
我想写一个以矩阵作为输入的函数.这是一个复杂项目中的频繁低级调用,因此尽可能快地使这个功能具有潜在的严重性能影响.因为速度对我来说非常重要,我正在使用类型,FixedSizeArrays因为我知道这将节省内存使用量.但我经常知道输入矩阵的某些属性,我不确定我是否正在充分利用它.
这是一个简单的例子.想象一下,我希望尽可能快地完成以下功能:
using FixedSizeArrays
function foo( input::Mat )
# NB: Mat is the FixedSizeArrays matrix type
return 2 * input
end
Run Code Online (Sandbox Code Playgroud)
显然这是一个微不足道的例子,但这不是重点.关键是我对矩阵的维度有所了解input:它总是只有两列,我总是可以在运行时指定行数.这似乎是可以传递给编译器以使我的代码更快的信息.我可以将它作为定义大小的参数传递input吗?这是一个不起作用的例子,但应该让你知道我正在尝试做什么.
function bar( int::N, thismat::Mat{N,2,Float64} )
return 2 * thismat
end
Run Code Online (Sandbox Code Playgroud)
有这样的东西我可以做吗?如果可以的话,这会发挥作用吗?也许FixedSizeArrays已经做了所有可以完成的事情.谢谢你的想法!
我想仅使用Rcpp设置矩阵的列名,但保持行名不变.据我所知,该dimnames属性仅设置两者.例如:
这是我想要做的最小例子,但只是在Rcpp而不是R:
my.mat <- diag(3)
colnames( my.mat ) <- c( "A", "B", "C")
my.mat
A B C
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?