2012-05-18 34 views
0

我正在使用MATLAB來訪問postgresql數據庫。我遇到的問題試圖訪問boolean[]類型的列:將java.lang.Boolean [] []轉換爲可用的MATLAB數組?

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

我懷疑這是由於Java的Boolean(一個對象)和boolean(一個原語)之間的差異所致。 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; 
+0

謝謝你把我到'booleanValue' - 一旦我索引一路到陣列(所以我不會僅僅獲得另陣列退出),該方法變爲可用。而不是循環,'arrayfun(@(x)x.booleanValue,array(:))'(根據需要重新設計)很好地完成了這個技巧。 – tmpearce

相關問題