0

約 500 (x、y、z) の実数値のセットがあります。(x,y) 座標に基づいて値をビンに入れる必要があるため、z 値を取り除き、別のリストに保存しました。x、y の値だけが残っています。それらを 1 ~ 100 の範囲のインデックス ペアに再スケーリングして丸めました。

ここで、特定の (x,y) 座標で 100x100 マトリックスの z 値を配列に入力したいと考えています。

より正確に、

たとえば、一連の値があります。data = {{2.62399, 0.338057, 2.09629}, {1.8424, 0.135817, 3.21925}, {0.702257, 1.14502, 3.9335}...

zvalues を取り除き、zvalues リストに保存します。

zvalues = {2.09629, 3.21925, 3.9335....

インデックスの新しい配列を丸め、再スケーリングし、作成しました

indices = {{53, 7}, {37, 3}, {14, 23}...

新しい 100x100 マトリックスを作成し、インデックス マトリックスに対応する座標に zvalue を配置したい

たとえば、擬似コードで

For (int i = 1, i < 101, i++){

NewArray(indices[i]) = zvalues[i];
}

ループが初めて実行されるときは、NewArray(53,7) = 2.09629.

インデックス配列をループして、2 次元の 100x100 NewArray に zvalues を入力する構文を知りたい

4

2 に答える 2

0

配列にインデックスを付ける新しい方法を作成する理由はわかりませんが、これはあなたが望むことを行います:

data = {{2.62399, 0.338057, 2.09629}, {1.8424, 0.135817, 3.21925}, {0.702257, 1.14502, 3.9335}};
zvalues = {2.09629, 3.21925, 3.9335};
indices = {{53, 7}, {37, 3}, {14, 23}};

newArray[xIndex_, yIndex_]:=Take[data, Position[indices, {xIndex, yIndex}][[1, 1]]][[1, 3]]

newArray[53, 7]
(* 2.09629 *)
于 2013-01-08T08:19:28.237 に答える
0

基本的なアプローチに従うには、配列を初期化する必要があります。

newArray=Table[,{100},{100}]

ループ内の構文は次のとおりです。

newArray[[indices[[i,1]],indices[[i,2]]]]=zdata[[i]]

配列(Mathematica 用語ではリスト)の一部を参照するための二重角括弧に注意してください

より良いアプローチは、SparseArray を作成することです。これは、事前の初期化を必要とせず、事前に次元を知る必要さえありません。

最後に、mathematica では通常、オブジェクト指向のアプローチを使用して、「do」ループをすべて一緒に回避できます。

data = {{1.5, 1.1, 1.1}, {2.2, 2.2, 2.2}, {1.01, 2.3, 1.2}};
m1 = Table[, {2}, {2}];
(m1[[Floor[#[[1]]], Floor[#[[2]]]]] = #[[3]]) & /@ data;
m1
m2 = SparseArray[ Floor[#[[1 ;; 2]]] -> #[[3]] & /@ data , Automatic,];
Normal[m2]


{{1.1, 1.2}, {Null, 2.2}}
{{1.1, 1.2}, {Null, 2.2}}
于 2013-01-08T13:01:51.830 に答える