私は Mathematica を始めたばかりで、関数を作成する際に発生するエラーにかなりイライラしています。以下に、行が例に対応し、列が機能に対応するマトリックスを「センタリング」するために書いている関数があります。目的は、各要素から、それが属する列の平均を減算することです。
centerdata[datamat_] := (
numdatapoints =
Dimensions[datamat][[1]](*Get number of datapoints*)
numberfeatures =
Dimensions[datamat[[1]]][[1]](*Get number of datapoints*)
columnmean = ((Total[datamat])/numdatapoints)
For[i = 1, i < numdatapoints + 1, i++, (* For each row*)
For[j = 1, j < numfeatures + 1, j++, (* For each element*)
datum = datamat[[i]][[j]];
newval = (datum - (colmean[[j]]));
ReplacePart[datamat, {i, j} -> newval];
];
];
Return[datamat];
)
マトリックスに対してこの関数を実行すると、次のエラーが発生します。
"Set::write: 4 {5.84333,3.054,3.75867,1.19867} のタグ時間は保護されています。>> Set::write: "4\ 150 のタグ時間は保護されています。"
{5.84333,3.054,3.75867,1.19867} はデータ マトリックスの最初の例で、150 はマトリックスの例の数です (興味のある人のために、有名なアイリス データセットを使用しています)。これらのエラーは、次のコードに対応しています。
numdatapoints = Dimensions[datamat][[1]](*Get number of datapoints*)
numberfeatures = Dimensions[datamat[[1]]][[1]](*Get number of datapoints*)
応答は一般的に乗算に関連しているため、このエラーをグーグルで調べたりいじったりしてもあまり役に立ちませんでした。これは明らかにここでは行われていません。