2017-05-06 1 views
1

을 저장하기 전에 NumPy와 3D 매트릭스의 열 및 행 선택 :추출 나는 다음과 같은 문제에 직면 전체 "파이썬"일에 새로운 오전으로

  1. 난 모양의 데이터 파일 .npy이을 (77,77 , 20). 이 파일에서 25 행 & 25 열을 추출하여 (25,25,20)과 같은 모양의 새 행렬을 얻고 싶습니다. 행과 열은 처음 25 개가 아니며 마지막 25 개가 아닙니다. 저는 두 개의 변수 "col_idx"& "row_idx"를 만들었습니다. 행 수는 & 개이지만 데이터에서 추출 할 수는 없습니다. 진행 방법에 대한 제안이 있으십니까?

  2. 읽을 수 있도록 numpy.savetxt (25,25,20) 행렬을 csv에 저장하려고합니다. stackoverflow에서이 부분에 대한 까다로운 someting 찾을 수 있습니다하지만 난 그냥 파이썬을 시작으로 난 정말 이해가 it.

나는 이것을 코드 작성하는 방법에 대해 자문을 제공합니다. 감사합니다.

답변

0

번호 1의 경우, 여기에 유일한 까다로운 일이 np.newaxis 일 지수

# generate data, and a list of row and column indices 
data = np.random.rand(77,77,20) 
col_idx = np.random.randint(0, 77, 25) 
row_idx = np.random.randint(0, 77, 25) 

# extract the subset 
subset = data[row_idx, col_idx[:, np.newaxis]] 
print(subset.shape) 
# (25, 25, 20) 

의 배열을 전달할 수 있습니다. NumPy의 예인 broadcasting은 다양한 모양의 배열을 결합하는 일련의 규칙입니다. 여기 형상 (25,)의 배열은 모양이 (25, 1) 인 색인 집합과 결합하여 (25, 25) 색인 격자를 생성하며 원래 배열의 (25, 25, 20) 하위 집합을 추출합니다.

CSV로 저장하는 한, pandas 라이브러리에서 제공하는 도구가 이러한 종류의 작업에 가장 유용하다는 것을 알게되었습니다. 3D 데이터의 경우, 당신은 3D 패널을 통해 dataframe로 변환 할 수 있으며, 직접 CSV로 저장 :이 결과

import pandas as pd 
panel = pd.Panel(subset) 
frame = panel.to_frame() 
frame.to_csv('output.csv') 

을을 CSV의 각 행의 제 1 및 제 2 항목으로 행/열 지수. csv 출력을 다른 형식으로 만들려면 저장하기 전에 표준 판다 색인 변환 (스택, 스택 해제, 색인 다시 생성 등)을 사용할 수 있습니다.

+0

도움 주셔서 감사합니다. 나는 "np.random.randint"부분을 얻지 못했습니까? 언제 추출 할 열의 위치를 ​​지정합니까? 파일에서 임의의 열을 원하지 않습니까? – Jrdnalvs

+0

데이터를 제공하지 않으므로 질문에서 언급 한 것과 비슷한 임의의 데이터 및 행/열 인덱스가 생성되었습니다. 행/열 인덱스 목록을 대신 사용하십시오. – jakevdp

+0

"TypeError : 튜플 인덱스가 튜플이 아닌 정수 여야합니다." – Jrdnalvs

관련 문제