我对 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 是矩阵中示例的数量(我使用的是著名的iris dataset,对于任何感兴趣的人)。这些错误对应于以下代码:
numdatapoints = Dimensions[datamat][[1]](*Get number of datapoints*)
numberfeatures = Dimensions[datamat[[1]]][[1]](*Get number of datapoints*)
谷歌搜索和玩弄这个错误并没有多大帮助,因为一般回复与乘法有关,这显然没有在这里完成。