掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイルから配列データを動的配列への一括読み込み (ID:151250)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
vramさん、早速ありがとうございます。 サンプルを試してみました。 PWordArrayを使用する事で非常に高速に取り込める(300x300x300でも試しました)様です。動的配列への代入も300x300x300で1秒掛かっていないくらい高速の様です。 私の方でもPWordArrayを使用してみました。然しながら、一括読み込み後、要素を個別に取り出すforループで”範囲チェックエラー”が生じてしまいます。メモリー不足でしょうか?三重ループのインデックスはいずれも範囲内、PWordArayのインデックスも読み出したサイズ以内ですが、、、 ただ、サンプルで300x300x300も試しましたが、前記の通り問題ありませんでした。 ところで、サンプルのPWordArrayを使用する方法は、私のポインターPWordでアクセスする方法と近いと思います。 ptr2 := PWord; と定義して、GetMem(ptr2,読み出すマトリックスのサイズ)で一括で読み出し、 三重ループで動的配列へ代入しています。 data2[i,j,k] := ptr2^; inc(ptr2); を回しています。 これで、範囲チェックエラーは発生しません。 但し、この三重ループ部分だけで何故か1~2秒掛かってしまっています。 ポインターでアクセスしているので速度的にはそれほど差はない様に思いますが、PWordArrayの方が高速と言う事でしょうか。 残念ながら、PWordArrayでは今のところ何故か範囲チェックエラーが発生して、データ読み込み自体が完了出来ません。 また、別の時間が掛かる処理が見つかりました。 ファイルから読み込んだ動的配列のデータに演算を施しているのですが、それに4~5秒くらい掛かっています。 三重ループを回して、同じ動的配列のdata2に対して、ある変数(param)を乗じて実数化し格納(data3)します。併せて、その実数の最大値(max)を見つけます。(1秒くらい) data3[i,j,k] := data[i,j,k]*param; もう一度三重ループを回して、各data3の最大値に対する比率を算出(data4)し格納します。更に、この比率を256階調化(data5)しています。(4秒くらい) data4[i,j,k] := data3[i,j,k] / max; data5[i,j,k] := Trunc(255*(1-data4[i,j,k])); 除算や関数”Trunc”を使っている為、時間が掛かっていると思います。ただ、外部とのI/Oを伴わないメモリー上の作業の為、もっと早くても良い様に思えます。何かこの様な処理を高速に行えないでしょうか? なお、ファイルから読み出すデータが2バイト整数ならPWordArrayで良いですが、4バイト実数の場合、PSingleArrayと言う型は無さそうです。 今現在、PSingleで受ける事を考えてはいますが、、、
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.