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

Postgresql 将java.lang.Boolean[]]转换为可用的MATLAB数组?,postgresql,matlab,Postgresql,Matlab,我正在使用MATLAB访问postgresql数据库。我在尝试访问类型为boolean[]的列时遇到问题: x;#% x is a <1x1 org.postgresql.jdbc4.Jdbc4Array> 不幸的是,使用布尔[]会导致以下错误消息: Undefined function 'toDouble' for input arguments of type 'logical'. 因此,我认为首先转换到逻辑可能有效: logical(x.getArray()); 不过这也

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

x;#% x is a <1x1 org.postgresql.jdbc4.Jdbc4Array>
不幸的是,使用
布尔[]
会导致以下错误消息:

Undefined function 'toDouble' for input arguments of type 'logical'.
因此,我认为首先转换到
逻辑
可能有效:

logical(x.getArray());
不过这也不行

Error using logical
Conversion to logical from java.lang.Boolean[][] is not possible.
问题可能会出现,因为java.lang.Boolean不是从java.lang.Number派生而来的,但是这似乎不是问题


我做错什么了吗?如何从
fetch
结果中获取可在MATLAB中使用的逻辑数组?如果所有其他方法都失败了,我可以用数值类型的数组而不是
布尔[]
,来重建表,但这似乎是不需要走那么远就可以做到的。

我怀疑这是由于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;

感谢您将我放在
booleanValue
-一旦我将所有的方法索引到数组中(这样我就不仅仅是从另一个数组中取回),该方法就变得可用了。而不是循环,
arrayfun(@(x)x.booleanValue,array(:)
(根据需要进行重塑)很好地完成了这项任务。
%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;