Wolfram mathematica Set::write:创建函数时出错
我对Mathematica很陌生,我对创建函数时产生的错误感到非常沮丧。下面,我编写了一个函数,用于“居中”矩阵,其中行对应于示例,列对应于特征。目的是从每个元素中减去它所属列的平均值Wolfram mathematica Set::write:创建函数时出错,wolfram-mathematica,Wolfram Mathematica,我对Mathematica很陌生,我对创建函数时产生的错误感到非常沮丧。下面,我编写了一个函数,用于“居中”矩阵,其中行对应于示例,列对应于特征。目的是从每个元素中减去它所属列的平均值 centerdata[datamat_] := ( numdatapoints = Dimensions[datamat][[1]](*Get number of datapoints*) numberfeatures = Dimensions[datamat[[1]]][[1
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];
)
谷歌搜索和玩弄这个错误并没有多大帮助,因为回复通常与乘法有关,这显然不是在这里完成的。给定一个数据表(tab
),函数Mean[tab]
将返回每列平均值的列表。接下来,如果要从表中的每一行中减去此值(按元素),请尝试以下操作:
Map[Plus[-Mean[tab],#]&,tab]
我有一种感觉,也许有一个内在的统计函数可以在一个语句中实现这一点,或者我对一个更简单的解决方案视而不见
由于您是初学者,我建议您立即阅读以下文档:
,它是函数式编程语言(如Mathematica)中的基本运算符之一;及Map
- 纯函数,其使用涉及神秘符号
和#
&
如果你在Mathematica程序中编写循环,你几乎肯定是误用了系统。也许你想使用
代码>在每个命令的末尾。
Map[Plus[-Mean[tab],#]&,tab]