将java.lang.Boolean [] []转换为可用的MATLAB数组?

时间:2012-05-18 17:40:22

标签: postgresql matlab

我正在使用MATLAB访问postgresql数据库。我在尝试访问boolean[]类型的列时遇到问题:

x;#% x is a <1x1 org.postgresql.jdbc4.Jdbc4Array>

访问real[]值时,我可以采用以下方法:

double(x.getArray());

不幸的是,使用boolean[]会导致以下错误消息:

Undefined function 'toDouble' for input arguments of type 'logical'.

所以我认为先转换为logical可能会有效:

logical(x.getArray());

除此之外也不起作用。

Error using logical
Conversion to logical from java.lang.Boolean[][] is not possible.

问题可能出现,因为java.lang.Boolean不是从java.lang.Number派生的,但是the MATLAB docs on conversion of java return types使它看起来不应该是一个问题。

我在这里做错了吗?如何从fetch结果获取MATLAB中可用的逻辑数组?如果所有其他方法都失败了,我可以使用数值类型的数组而不是boolean[]来重建表格,但看起来这应该是可能的,而不会走得那么远。

1 个答案:

答案 0 :(得分:1)

我怀疑这是由于Boolean(一个对象)和boolean(一个原语)之间的Java差异造成的。 Matlab转换实际上是为了处理原语而设置的,不一定是它们关联的对象包装器。

我认为这种转换需要一个循环,如下所示:

%Setup test
b = java.lang.Boolean.FALSE;
array = java.lang.reflect.Array.newInstance(b.getClass(), [5 6]);
for ix1=1:length(array); 
    for ix2 = 1:(length(array(1))); 
        array(ix1, ix2)=b; 
    end; 
end;
%Now `array` is an initialize 2D Java array of type Boolean.

%To convert to a Matlab logical array
matArray = false(length(array), length(array(1)));  %Initialize
for ix1=1:size(matArray, 1); 
    for ix2 = 1:size(matArray, 2); 
        matArray(ix1, ix2)=(array(ix1, ix2).booleanValue());
        %The  `booleanValue()` method converts from `Boolean` class  to `boolean` primitive
    end; 
end;