2017-10-20 3 views
0

나는 다음과 같은 문제가있다. 나는 모든 배열이 좌표이고 값을 얻는 matrix = np.zeros((30,30,100))과 같은 3D 배열을 가지고있다. 그래서 matrix [0][0][0]은 좌표 x = 0, y0, z = 0이고 값은 0입니다. 이제 첫 번째 3 개의 행이 좌표이고 4 번째로 해당 값인 CSV에 모든 값을 저장하려고합니다 :Python : 3D 배열에 값을 CSV로 저장

enter image description here

이 작업을 수행하는 NumPy와 가진 빠른 방법이 있나요?

+0

해당 가치는 어디서 발생합니까? – vipertherapper

+0

그들은 다른 프로세스에 저장되어 있지만이 예제에서는 0 만 저장해도 괜찮습니다. – Varlor

+0

CSV 파일이어야합니까? 나는 np.save가 ND 배열을 numpy로 저장하는 데 더 유용하다는 것을 발견했다. – BenT

답변

1

팬더를 사용할 수 있습니다. 배열을 바꿔서 csv로 저장할 수 있습니다.

import numpy as np 
import pandas as pd 
# create an example array 
a = np.arange(24).reshape([2,3,4]) 
# convert it to stacked format using Pandas 
stacked = pd.Panel(a.swapaxes(1,2)).to_frame().stack().reset_index() 
stacked.columns = ['x', 'y', 'z', 'value'] 
# save to disk 
stacked.to_csv('stacked.csv', index=False) 

그렇지 않으면, 당신은 당신의 배열에

np.ravel() 

을 적용 할 수 있습니다 후 조리법 in this question 중 하나를 사용하여 인덱스를 복원합니다.

0

나는 당신이 인덱스로 좌표를 얻을 상상 :

def iter_3D(matrix): 
    for i in range(matrix.shape[0]): 
     for j in range(matrix.shape[1]): 
      for k in range(matrix.shape[2]): 
       yield i, j, k 

l = [] 

for i, j, k in iter_3D(matrix): 
    l.append('%d %d %d %d' %(str(indices_x(i, j, k)), str(indices_y(i, j, k)), str(indices_z(i, j, k)), str(matrix[i, j, k])) 

with open('file.csv', 'w') as f: 
    f.write("\n".join(l)) 

더 정교한 솔루션이 가능하지만이 핵심이어야한다. 보다 정교한 반복 방법을 원하거나 pandas을 사용하려면 (파이썬 문서에서 csv io을 보거나 잠깐 시간을내어 사용하십시오.) nditer