Postgresql 将java.lang.Boolean[]]转换为可用的MATLAB数组?
我正在使用MATLAB访问postgresql数据库。我在尝试访问类型为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()); 不过这也
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;