데이터를 다루다보면,
특정 조건을 만족하는 데이터만 추출하거나 삭제해야 하는 일들이 빈번하게 발생한다.
이런 경우, Position기능에서 _?()옵션을 사용함으로써 쉽게 문제를 해결할 수 있다.
예를 들어, 아래와 같이 말이다.
아래의 예들은 데이터들 중 지정한 '최소값'보다 큰 값들이나 '최대값'보다 작은 값들의 위치를 찾는 코드이다.
특정값과 동일한 위치를 찾을 때는 _?()옵션 없이 Position기능을 사용하면 된다 (다른 포스팅 참고).
Position
[데이터, _?(# > 최소값 &)]
Position
[데이터, _?(# < 최대값 &)]
예를 들어
yData={1,5,2,1,10}
인 yData값으로부터 4보다 큰 값들이 있는 위치를 알고자 한다고 해보자.
이 때, 아래와 같이 할 수 있다.
yData={1,5,2,1,10}
Position
[yData, _?(# > 4 &)]
Position기능을 통해서 얻을 수 있는 결과값은 리스트의 형태로써 아래와 같이 주어진다.{{첫번째 위치},{두번째 위치},...}
예를 들어, 위의 조건을 만족시키는 위치는 2번째, 5번째 위치이기에,
아래와 같은 결과값을 얻게될 것이다.{{2},{5}}
이런 형태에 결과값은 Mathematica에서 Extract와 Delete기능과 함께 사용될 수 있다.
Extract가 특정 데이터를 뽑아내는 것과 달리,
Delete는 특정 데이터를 삭제하는 건데 사용법은 Extract와 완전히 동일하다. 사용법이 동일하기에 이 포스팅에서는 Extract로만 설명을 하도록 하겠다.
예를 들어, 데이터에서 2, 5번째 위치에 있는 데이터만 뽑아내려면 아래와 같이 하면 된다.Extract
[행렬이나 벡터 형식의 데이터,{{2},{5}}]
물론, 앞서 사용했던 Position구문을 Extract안에 적어서 아래와 같이 사용하는 것도 당연히 가능하다.Extract
[행렬이나 벡터 형식의 데이터,
Position
[벡터 형식의 데이터, _?(# > 최소값 &)]]
즉, 아래와 같이 사용할 수 있다는 거다.yData={1,5,2,1,10}
Extract
[yData,
Position
[yData, _?(# > 4 &)]]
이렇게 하면 결과값으로 4보다 큰 값들인 {5,10}으로 결과값을 얻게 된다.
이러한 기능은 앞서 적힌 것처럼 벡터 형식의 데이터 뿐 아니라
x와 y값으로 이루어진 행렬 형태의 데이터와도 작동한다.
즉, x와 y데이터가 아래와 같이 있다고 하자.
(y데이터는 지금까지와 동일하고, x값만 추가시킨 것임)xyData={{1,1},{2,5},{3,2},{4,1},{5,10}}
y데이터를 기준으로 y가 4보다 큰 xy의 데이터를 구하는 코드는 아래와 같다.Extract
[xyData,
Position
[xyData[[
All
,2]], _?(# > 4 &)]]
위에서 xyData[[All,2]]는 yData데이터 값만으로 뽑아내는 걸 의미한다.
이렇게 하면, 기준에 맞는 데이터만 추출되게 되어 {{2,5},{5,10}}
가 결과값으로 남게된다.
'Software > Mathematica' 카테고리의 다른 글
Mathematica에서 if논리구문과 조건문 사용하는 법 (And, Or등과 함께) (0) | 2015.07.24 |
---|---|
[Mathematica] x와 y의 데이터를 합쳐 xy행렬 만들기 (0) | 2015.07.05 |
Mathematica에서 행렬 만들기 (0) | 2015.06.16 |
Mathematica를 처음 시작할 때 기초! (8) | 2015.04.16 |
Mathematica에서 문자열(String)을 정의하고 다루는 방법 정리 (0) | 2015.04.06 |