2012-09-27 5 views
2

numpy 배열 내에서 요소를 가져 와서 루프에서 크기를 조정하는 방법에 대한 질문이 있습니다.부적절한 크기의 요소가있는 시계열

기본 문제는 y 값이 누락 된 일부 요소가있는 형식 (x, y)의 시계열을 사용하여 길이가 1 인 것으로 프로그램에 읽히는 것입니다.

예 : [X, Y] [X, Y] [X]

그래서 난이 가끔 점을 표준에 크기를 조정해야 [X, Y] (1, 2) (그리고 배포판을 기반으로 지점을 생성하지만 문제는 아닙니다.) 나는 numpy.resize 기능을 알고,하지만 난하려고하면

for element in list: 
    if len(element)==1: 
     element=n.resize(element,(1,2)) 

는 루프의 범위 내에서 작동하지만 내가 목록을 인쇄하는 경우 모든 요소는 루프가 발생하지 않을 경우와 동일합니다. resize 함수는 배열을 반환하므로 목록의 요소를 해당 배열과 동일하게 설정하는 것이 왜 효과가 없는지 혼란 스럽습니다.

편집

: 나는 일반 파이썬 목록을 사용하여 간단한 해결책을 발견 :

for element in list: 
    if len(element)==1: 
     element.append(0) 

을하지만 확실히 무언가 같이 가능 요소를 설정 때문에, 위에서 작동하지 않는 이유에 대해 여전히 궁금합니다. 또는 요소 [i]를 [1, x] 배열의 무언가와 동일하게 설정할 수 있습니까?

+0

시계열을 다루기 위해 [pandas] (http://pandas.pydata.org/)를 제안합니다. [read_csv] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html#pandas-io-parsers-read-csv) 함수는 필요한 모든 것을 제공해야합니다. 데이터를 분석하십시오. – bmu

답변

0

element=...라고 말하면 요소가 참조하는 개체를 수정하지 않으면 element은 새 개체를 참조하게됩니다. 요소에 append을 호출하면 실제로 개체가 수정됩니다. element=n.resize(element, (1,2))

2

, 당신은 실제로 이전 elementnp.resize의 결과 인 새로운 객체 element를 만드는,하지만 당신이 새로운 개체와 아무것도하지 않는로, 수정 사항이 손실됩니다.

element.append(0)을 수행 할 때 element을 수정하면 여전히 초기 개체를 참조하므로 수정 사항이 저장됩니다.

그렇다면 ndarray에는 누락 된 요소를 처리하는 더 좋은 방법이 있습니다. 모든 요소가 두 항목의 순서가 아니라면 N 요소 목록에서 (N,2) 배열을 만들 수는 없습니다. 어떻게 든 간격을 채워야합니다.

>>> data = StringIO.StringIO("1,2\n3,4\n,6\n7,\n") 
>>> x = np.genfromtxt(data, delimiter=",", usemask=True) 
>>> x 
masked_array(data = 
[[1.0 2.0] 
[3.0 4.0] 
[-- 6.0] 
[7.0 --]], 
      mask = 
[[False False] 
[False False] 
[ True False] 
[False True]], 
     fill_value = 1e+20) 

초기 격차는 당신을위한 특별한 np.ma.masked 값 가득되었습니다 초기 데이터를 텍스트 파일에서 제공된 경우, 당신은 MaskedArray 만들기 위해 usemask=True 매개 변수 np.genfromtxt을 사용할 수 있습니다.