0

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 から派生していないために問題が発生する可能性がありますが、Java の戻り値の型の変換に関する MATLAB ドキュメントでは、これは問題ではないように思われます。

ここで何か間違ったことをしていますか?fetch結果から MATLAB で使用できる論理配列を取得するにはどうすればよいですか? 他のすべてが失敗した場合は、代わりに数値型の配列を使用してテーブルを再構築できますが、boolean[]それほど遠くまで行かなくても可能であるように思われます。

4

1 に答える 1

1

Booleanこれは Java の(オブジェクト) と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;
于 2012-05-18T19:38:00.273 に答える