2011-08-15 9 views
0
IはHDF5DotNet( http://hdf5.net/参照)と遊ぶ

を初期化することができません。言って以上4次元配列 - オブジェクト

new 'Type [] 
new 'Type [,] 
new 'Type [,,] 
new 'Type [,,] 
new 'Type [,,,] 
new 'Type [,,,,] 
new 'Type [,,,,,] 
... 

は私も2次元アレイ用

let data = Array2D.create 256 512 4. 
let test = H5Array data 

を書き、私はエラーを取得する:この種のコンストラクタをたくさん持っているクラスH5Arrayあり

internal error: F# supports a maxiumum .NET array dimension of 4

マイ二つの質問は以下のとおりです。

  1. MAKする方法それは2Dデータのために働く?
  2. 4次元以上のデータを扱うにはどうすればいいですか?

答えて

0

フム、質問#2のために、私はあなたが大規模なランクの配列を作るためにArray.Create

http://msdn.microsoft.com/en-us/library/dfs8044k.aspx

を使用すると思い期待しています。しかし、#1がコンパイラのバグかどうか疑問に思っていますか?

+0

ありがとうございます。この 'let data = Array.CreateInstance(float.GetType()、[| 1; 2; 3; 4; 5 |])'は同じエラーを返します。私はこの行動をどこかに報告しなければならないのでしょうか?ところで、それを動作させるための回避策はありますか?私が考えることができるのは、別のC#プロジェクトを作成してコンストラクタをラップすることだけです。 –

+0

それはF#コンパイラ/言語の制限です(言語仕様では、F#はランク4までしかサポートしていません)。私たちが「野生の中で」より高いランクの本当の事例に遭遇したことを思い出すのは初めてです。これらのコンストラクタを呼び出すいくつかの静的メソッドを公開し、F#が高位配列を参照する必要がないようにするC#型のコンストラクタをラップすると、実際には回避できます。 – Brian

+0

ありがとうございます。しかし、オブジェクトが上位のコンストラクタも持っている場合、少なくともランクが4の場合は常に動作するはずです。 –