1
인덱스를 변경해야하는 사용자의 결정을 기반으로 N 차원 배열의 값을 조작하려고합니다.N 차원 numpy 배열의 슬라이스로 목록 전달
import numpy as np
a = np.arange(24).reshape(2,3,4)
toChange = ['0', '0', '0'] #input from user via raw_input
a[toChange] = 0
을하지만 한 위치하지만 완전한 행뿐만 아니라 변경하려는 경우, 나는 문제에 실행 :이 예는 잘 작동
이toChange = ['0', '0', ':'] #input from user via raw_input
a[toChange] = 0
이 ValueError: setting an array element with a sequence
됩니다. a[0, 0, :] = 0
은 정확히 내가 원하는대로 문제가 ':'문자열이라는 것을 알 수 있습니다. 질문은 배열에 문자열을 전달하는 방법입니다.
또는 더 똑똑한 방법으로 사용자 정의 슬라이스를 조작 할 수 있습니까?
PS : 당신이 대체한다면
>>> class Indexable(object):
... def __getitem__(self, idx):
... return idx
...
>>> Indexable()[0, 0, :]
(0, 0, slice(None, None, None))
: 내가 oldstable 데비안에서 일하고 있어요 나는 파이썬 2.6.6와 NumPy와 1.4.1
빠른 응답 감사합니다! 이 대화 형 모드에서 잘 작동하지만 내 스크립트에서 어떻게 든 새로운 오류가 발생합니다 : toChange = [0, 0, slice (None, None, None)] TypeError : 'numpy.ndarray'객체를 호출 할 수 없습니다. toChange가 배열로 간주 될 가능성이 있습니까? – Gnihilo
튜플을 사용하여 ND- 색인을 수행하는 것이 좋습니다. 목록/시퀀스 사용법은 흔들리는 논리에 달려 있으며 개인적으로는 금지하기를 선호합니다. – seberg
좋아요, 문제가 있습니다. 배열을 조작하기 전에 배열을 조작하기 전에 전체 배열을 'with open ("out/histData.txt", "w")을 dataFile로 사용하여 파일에 쓰려고했기 때문에 문제가 발생했습니다. histData의 조각 : np.savetxt (dataFile, slice, fmt = "% 2f", 구분 기호 = "\ t")' 따라서'slice'는 ndarray 였고 모든 것이 작동하지 않았습니다. 아마추어 시간 :-) @seberg :이 솔루션은 어떻게 생겼습니까? – Gnihilo