문제

나는 Python과 Numpy를 처음 접했으며, 가면에 뷰를 적용 할 때 Numpy.recarray를 수정할 수 없다는 문제에 직면하고 있습니다. 파일에서 Recarray를 읽은 다음 두 개의 마스크 뷰를 작성한 다음 For Loop의 값을 수정하려고합니다. 다음은 예제 코드입니다.

import numpy as np
import matplotlib.mlab as mlab


dat = mlab.csv2rec(args[0], delimiter=' ')
m_Obsr = dat.is_observed == 1
m_ZeroScale = dat[m_Obsr].scale_mean < 0.01


for d in dat[m_Obsr][m_ZeroScale]:
    d.scale_mean = 1.0

그러나 결과를 인쇄 할 때

newFile = args[0] + ".no-zero-scale"

mlab.rec2csv(dat[m_Obsr][m_ZeroScale], newFile, delimiter=' ')

파일의 모든 scale_means는 여전히 0입니다.

나는 뭔가 잘못하고 있어야한다. 보기의 값을 수정하는 적절한 방법이 있습니까? 두 개의 조회수를 하나씩 적용하기 때문입니까?

고맙습니다.

도움이 되었습니까?

해결책

나는 당신 이이 용어에서 "마스킹 된 견해"에서 오해를 가지고 있다고 생각하며 (다시) 읽어야합니다. 그 책 (이제 자유롭게 다운로드 할 수 있음) 이해를 명확히하기 위해.

섹션 3.4.2에서 인용합니다.

선택 객체 인 OBJ가 비 튜플 시퀀스 객체, ndarray (데이터 유형 정수 또는 bool) 또는 하나 이상의 서열 객체 또는 ndarray (데이터 유형 정수 또는 bool)가있는 튜플 인 경우 고급 선택이 트리거됩니다. 고급 인덱싱에는 정수와 부울의 두 가지 유형이 있습니다. 고급 선택은 항상 데이터 사본을 반환합니다 (보기를 반환하는 기본 슬라이싱과 대조).

여기서하고있는 것은 부울 종류의 고급 선택이므로 사본을 받고 어디에도 구속하지 않습니다. 사본을 변경 한 다음 버리게 한 다음 새 신선한 사본을 작성하십시오. 원본에서.

문제를 이해하면 솔루션이 간단해야합니다. 한 번 사본을 작성하고 해당 사본을 변경하고 동일한 사본을 작성하십시오. 즉:

dat = mlab.csv2rec(args[0], delimiter=' ')
m_Obsr = dat.is_observed == 1
m_ZeroScale = dat[m_Obsr].scale_mean < 0.01
the_copy = dat[m_Obsr][m_ZeroScale]

for d in the_copy:
    d.scale_mean = 1.0

newFile = args[0] + ".no-zero-scale"
mlab.rec2csv(the_copy, newFile, delimiter=' ')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top