小编sha*_*hef的帖子

matlab mex文件的共享库位置:

我正在尝试编写一个使用libhdf5的matlab mex函数; 我的Linux安装提供了libhdf5-1.8共享库和头文件.但是,我的Matlab版本r2007b提供了1.6版本的libhdf5.so.(matlab .mat文件bootstrap hdf5,显然).当我编译mex时,它在Matlab中会出现段错误.如果我将我的libhdf5版本降级到1.6(不是长期选项),代码编译并运行正常.

问题:我该如何解决这个问题?如何告诉mex编译过程链接/usr/lib64/libhdf5.so.6而不是/opt/matlab/bin/glnxa64/libhdf5.so.0?当我尝试-Wl,-rpath-link,/usr/lib64在我的编译中使用时,我得到的错误如下:

/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../x86_64-pc-linux-gnu/bin/ld: warning: libhdf5.so.0, needed by /opt/matlab/matlab75/bin/glnxa64/libmat.so, may conflict with libhdf5.so.6
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

    mex: link of 'hdf5_read_strings.mexa64' failed.

make: *** [hdf5_read_strings.mexa64] Error 1
Run Code Online (Sandbox Code Playgroud)

ACK.最后一种方法是下载hdf5-1.6.5标题的本地副本并完成它,但这不是未来的证明(Matlab版本升级是我的未来.).有任何想法吗?

编辑:根据Ramashalanka的优秀建议,我

A)要求mex -v获得3个gcc命令; 最后一个是链接器命令;

B)用a -v来调用该链接器命令来获取collect命令;

C)调用它collect2 -v -t和其余的标志.

我输出的相关部分:

/usr/bin/ld: mode elf_x86_64
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/crti.o
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/crtbeginS.o
hdf5_read_strings.o
mexversion.o
-lmx (/opt/matlab/matlab75/bin/glnxa64/libmx.so)
-lmex (/opt/matlab/matlab75/bin/glnxa64/libmex.so)
-lhdf5 (/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/libhdf5.so)
/lib64/libz.so
-lm (/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/libm.so) …
Run Code Online (Sandbox Code Playgroud)

matlab gcc rpath hdf5 mex

10
推荐指数
1
解决办法
1万
查看次数

R中函数多态的建议做法是什么?

假设我想编写一个函数,R其中包含一些关于某些数据的足够统计数据的函数.例如,假设函数,调用它foo.func仅取决于数据样本的样本均值.为方便起见,我认为用户可能希望传递 foo.func随机变量的样本(在这种情况下foo.func计算样本均值), 样本均值本身,这就是所foo.func需要的.出于效率的原因,如果存在诸如foo.func被调用的多个函数,则可以采用样本均值,后者是优选的.在这种情况下,平均值只需要计算一次(在我遇到的实际问题中,所讨论的样本统计数据可能是计算密集型的).

总之,我想写入foo.func初学者可访问(传入数据,让函数计算足够的统计数据)以及专家(预先计算足够的效率统计数据并将其传递).推荐的做法是什么?我是否传递了逻辑标志?多个参数?一些方法可能是:

#optional arguments
foo.func <- function(xdata, suff.stats=NULL) {
  if (is.null(suff.stats)) {
    suff.stats <- compute.suff.stats(x)
  }
  #now operate on suff.stats
}
Run Code Online (Sandbox Code Playgroud)

要么

#flag input
foo.func <- function(data.or.stat, gave.data=TRUE) {
  if (gave.data) {
    data.or.stat <- compute.suff.stats(data.or.stat)
  }
  #now operate on data.or.stat
}
Run Code Online (Sandbox Code Playgroud)

我想,我倾向于前者

polymorphism r

10
推荐指数
2
解决办法
2201
查看次数

副作用陷入python/numpy?想要恐怖故事和狭隘逃脱

我正在考虑从Matlab转到Python/numpy进行数据分析和数值模拟.我已经使用Matlab(和SML-NJ)多年了,并且在功能环境中非常舒适而没有副作用(除了I/O),但我对Python中的副作用有点不情愿.人们可以分享他们最喜欢的关于副作用的问题,如果可能的话,他们如何绕过它们?作为一个例子,当我在Python中尝试以下代码时,我有点惊讶:

lofls = [[]] * 4    #an accident waiting to happen!
lofls[0].append(7)  #not what I was expecting...
print lofls         #gives [[7], [7], [7], [7]]
#instead, I should have done this (I think)
lofls = [[] for x in range(4)]
lofls[0].append(7)  #only appends to the first list
print lofls         #gives [[7], [], [], []]
Run Code Online (Sandbox Code Playgroud)

提前致谢

python matlab functional-programming side-effects

7
推荐指数
1
解决办法
499
查看次数

为什么R中的sd返回矩阵输入的向量,我该怎么办呢?

我有点困惑为什么sdR中的函数返回一个矩阵输入的数组(我想保持向后兼容性,它总是会).这对我来说是非常奇怪的行为:

#3d input, same same
print(length(mean(array(rnorm(60),dim=c(3,4,5)))))
print(length(sd(array(rnorm(60),dim=c(3,4,5)))))
#1d input, same same
print(length(mean(array(rnorm(60),dim=c(60)))))
print(length(sd(array(rnorm(60),dim=c(60)))))
#2d input, different!
print(length(mean(array(rnorm(60),dim=c(12,5)))))
print(length(sd(array(rnorm(60),dim=c(12,5)))))
Run Code Online (Sandbox Code Playgroud)

我明白了

[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 5
Run Code Online (Sandbox Code Playgroud)

这与输入是2-d数组时的sd行为不同mean(显然仅在这种情况下!)然后考虑,这个失败的函数通过标准偏差重新缩放k维数组的每一列:

re.scale <- function(x) {
    #rescale by the standard deviation of each column
    scales <- apply(x,2,sd)
    ret.val <- sweep(x,2,scales,"/")
}

#this works just fine
x <- array(rnorm(60),dim=c(12,5))
y <- re.scale(x)

#this throws a warning
x <- array(rnorm(60),dim=c(3,4,5))
y <- re.scale(x)
Run Code Online (Sandbox Code Playgroud)

sd如果没有这种奇怪的行为,还有其他一些功能需要替换吗?如何re.scale …

r

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

如何让Matlab帮助正确显示奇怪URL的Web链接?

通常,如果我在文件中包含foo.m以下形式的注释:

% See also: <a href="http://en.wikipedia.org/etc">link name</a>
Run Code Online (Sandbox Code Playgroud)

该链接出现在帮助浏览器中,在Matlab中,我发布

>> help foo
Run Code Online (Sandbox Code Playgroud)

我得到类似的东西

另请参见:链接名称

到现在为止还挺好.但是,有一些网址有搞笑人物,例如:

% See also: <a href="http://en.wikipedia.org/wiki/Kernel_(statistics)">http://en.wikipedia.org/wiki/Kernel_(statistics)</a>
Run Code Online (Sandbox Code Playgroud)

Matlab无法在帮助浏览器中正确呈现此内容.当我查看帮助时,它看起来像这样:

另请参阅: 统计)"> http://en.wikipedia.org/wiki/Kernel_(统计)

链接到名为'statistics'的本地目录.我尝试了各种引用转义和反斜杠,但无法让浏览器正常工作.

url matlab

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

我应该如何在 R 中调用 model.frame?

我正在尝试用 R 编写我自己的建模函数,它需要一个公式、一些数据以及一些额外的上下文,比如权重;在调用model.frame以提取必要的数字数据后,它将执行拟合。我的第一遍看起来像:

my_modfunc <- function(formula,data,weights=NULL) {
    mf <- model.frame(formula,data=data,weights=weights)
    wt <- model.weights(mf)
    # do some fitting here...
}

# make fake data to test it
set.seed(1234)
data <- data.frame(x1=rnorm(50),x2=rnorm(50),y=rnorm(50),w=runif(50))

# call it:
my_modfunc(y ~ x1 + x2,data=data,weights=w)
Run Code Online (Sandbox Code Playgroud)

这失败了,我收到错误: Error in model.frame.default(formula, data = data, weights = weights) : invalid type (closure) for variable '(weights)'

同样,如果我打电话

my_modfunc(y ~ x1 + x2,data=data,weights='w')
Run Code Online (Sandbox Code Playgroud)

我犯了同样的错误。我怀疑环境、引用等有问题。

剪切和粘贴 的源代码lm,我可以将我的函数重写为

# based on lm
weird_modfunc <- function(formula,data,weights=NULL ) {
    cl …
Run Code Online (Sandbox Code Playgroud)

modeling scope r

4
推荐指数
1
解决办法
770
查看次数