Wolfram mathematica Set::write:创建函数时出错

Wolfram mathematica Set::write:创建函数时出错,wolfram-mathematica,Wolfram Mathematica,我对Mathematica很陌生,我对创建函数时产生的错误感到非常沮丧。下面,我编写了一个函数,用于“居中”矩阵,其中行对应于示例,列对应于特征。目的是从每个元素中减去它所属列的平均值 centerdata[datamat_] := ( numdatapoints = Dimensions[datamat][[1]](*Get number of datapoints*) numberfeatures = Dimensions[datamat[[1]]][[1

我对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];
  )
谷歌搜索和玩弄这个错误并没有多大帮助,因为回复通常与乘法有关,这显然不是在这里完成的。

给定一个数据表(
tab
),函数
Mean[tab]
将返回每列平均值的列表。接下来,如果要从表中的每一行中减去此值(按元素),请尝试以下操作:

Map[Plus[-Mean[tab],#]&,tab]
我有一种感觉,也许有一个内在的统计函数可以在一个语句中实现这一点,或者我对一个更简单的解决方案视而不见

由于您是初学者,我建议您立即阅读以下文档:

  • Map
    ,它是函数式编程语言(如Mathematica)中的基本运算符之一;及
  • 纯函数,其使用涉及神秘符号
    #
    &

如果你在Mathematica程序中编写循环,你几乎肯定是误用了系统。

也许你想使用
在每个命令的末尾。
Map[Plus[-Mean[tab],#]&,tab]