2014-09-24 34 views
0

如何将Julia Int/Bool数组/矢量转换为Fortran LOGICAL数组以便在Julia的ccall中使用?如何将Julia Bool数组转换为Fortran逻辑数组

我试着将它作为Array {Bool}传递给https://gist.github.com/axsk/28f297e2207365a7f4e8/,但代码工作不正常,我相当确信问题是布尔逻辑转换。

+0

在http://julia.readthedocs.org/en/latest/manual/types/#bits-types中写道即使是bool类型也有8位。可能这是问题,但我该如何解决它? – axsk 2014-09-24 16:48:58

回答

1

我不知道太多关于调用Fortran代码,但根据this

Fortran标准没有规定如何逻辑类型 的变量来表示,除了要求默认 样的逻辑变量与默认的INTEGER和REAL变量具有相同的存储大小。 GNU Fortran内部表示如下。一个LOGICAL(KIND = N)变量表示为INTEGER(KIND = N) 变量,但只有两个允许值:1表示.TRUE。和 0代表.FALSE ..任何其他整数值都会导致未定义的行为。

所以我会做类似如下

julia_array = rand(Bool, 1:10) 
fort_array = Int[x?1:0 for x in julia_array] 

然后用fort_array为输入。你正在使用哪种Fortran编译器?

编辑:事实证明,朱莉娅开发已经定义了一种类型,将与链接BLAS/LAPACK,Base.BLAS.BlasInt,将使用正确的Int变种的系统。

+0

我不是自己编译Fortran代码,而是使用Julia附带的LAPACK Fortran库。但是到目前为止,我会在回家时尝试。 – axsk 2014-09-24 18:25:34

+0

如果遵循这个约定,我认为你会很幸运。如果这不起作用,接下来要做的事情是制作数组类型CInt – IainDunning 2014-09-24 21:47:56

+0

因此,它看起来像解决了您的问题? (去https://groups.google.com/forum/#!topic/julia-dev/Bn1c5npwGzo) – IainDunning 2014-09-25 01:00:11

0

由于之前发布,Fortran代表Logical变量为Integers。 不幸的是,Integer类型的表示因平台而异。 虽然我在Windows上使用Int,在Linux/MacOS上使用Cint,但最终我使用了BlasInt,这取决于平台。

+0

代码本身请参阅https://github.com/JuliaLang/julia/pull/8467 – axsk 2014-09-27 00:16:54

+0

它似乎是反对SO礼节接受我的答案,然后切换到自己以后,主要是使用我自己的信息。我认为用拼图的最后一部分(BlasInt)更新我的答案会更合适。无论如何,很高兴它的工作。 – IainDunning 2014-09-27 04:30:30

+0

对不起,我自己也不太确定。开始了 :) – axsk 2014-09-27 08:34:13