2012-12-12 3 views
0

저는 Mathematica에 익숙하지 않아 함수를 만들 때 발생하는 오류에 상당히 좌절감을 느끼고 있습니다. 아래에는 행이 예제에 해당하는 행렬과 '기능에 대한 열'을 '센터링'하기 위해 작성한 함수가 있습니다. 목표는 각 요소에서 자신이 속한 열의 평균을 빼는 것입니다.Set :: write : 함수 생성시 오류가 발생했습니다.

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]; 
) 

행렬이 기능을 실행, 나는 다음과 같은 오류 얻을 :

"설정 : 쓰기 :. 태그 타임즈 4 {5.84333,3.054,3.75867,1.19867}이 보호되어있는 >>를 세트 :: 쓰기 : "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*) 

일반적으로 회신과 관련된 회신은이 오류로 인해 인터넷 검색과 도움이되지 않아서 분명히 도움이되지 못합니다.

+1

아마도 각 명령의 끝에서';'를 사용하고 싶을 것입니다. –

답변

2

데이터 테이블 (tab)이 주어지면 Mean[tab] 함수는 각 열의 평균값 목록을 반환합니다. 다음으로,이 (요소 - 현명한) 테이블의 각 행에서 빼기하려는이 시도 :

Map[Plus[-Mean[tab],#]&,tab] 

내가 하나 개의 문장 또는에서이 작업을 수행 할 수있는 고유의 통계 기능 중 하나가 아마도이 있다는 느낌이 나는 훨씬 간단한 해결책에 대해 눈이 멀었다. 당신이 초보자이기 때문에

나는 즉시 설명서 읽어 볼 것을 제안 : 같은 매스 매 티카는 척으로 함수형 프로그래밍 언어의 기본적인 통신 사업자 중 하나입니다

  • Map을;
  • 순수 함수 암호 기호 #&이 사용됩니다.

Mathematica 프로그램에서 루프를 작성하는 경우 시스템을 잘못 사용하는 것이 확실합니다.

+0

답변과 포인터를 제공해 주셔서 감사합니다. 매우 유용합니다. – Mike

관련 문제