2017-04-21 59 views
0

我有一個三維數組的形狀:(766L,256L,256L),我需要爲陣列中的每個766個切片創建一個文件,這裏是我的代碼:從3D陣列寫入多個文件

import numpy as np 
import pyfits as fit 

data = fit.open('lsb_0299170159_0x53c_sci.fit') 
scidata=data[0].data  #Here is the data 
print scidata #This is a part of the data to show the structure 

>>>[[[ 1.93521921e-02 5.53070288e-03 5.54129062e-03 ..., 7.59920711e- 
03 
7.43154995e-03 9.53296479e-03] 
[ 5.75147476e-03 6.56543719e-03 6.83003664e-03 ..., 4.90503712e-03 
    5.36678405e-03 3.56429932e-03] 
[ 4.48714197e-03 6.52663829e-03 6.36298675e-03 ..., 5.20661334e-03 
    4.07732278e-03 8.60160124e-03] 
..., 
[ 3.72386798e-02 3.89487632e-02 3.83604541e-02 ..., 6.86576292e-02 
    7.70815611e-02 8.00874010e-02] 
[ 3.48356217e-02 3.67552601e-02 3.45812403e-02 ..., 7.06715509e-02 
    6.99861422e-02 7.58737400e-02] 
[ 3.13520059e-02 3.35403681e-02 3.80725004e-02 ...,    nan 
       nan    nan]] 

[[ 1.93521921e-02 1.42930017e-03 1.38372893e-03 ..., 1.31980027e-03 
    1.37834414e-03 1.39542914e-03] 
[ 1.73271971e-03 1.41039363e-03 1.52022589e-03 ..., 1.29821908e-03 
    1.20712281e-03 1.24027242e-03] 
[ 1.73819589e-03 1.48109102e-03 1.49079110e-03 ..., 1.19586918e-03 
    1.21934328e-03 1.35999266e-03] 
..., 
[ 3.46756959e-03 3.67738772e-03 3.22443643e-03 ..., 4.02061298e-04 
    6.46648754e-04 7.07142055e-04] 
[ 3.69005208e-03 3.11211054e-03 3.23838764e-03 ..., 5.41916583e-04 
    4.33047127e-04 5.89787844e-04] 
[ 3.40519636e-03 3.49198561e-03 3.19557916e-03 ...,    nan 
       nan    nan]] 

for i in range(scidata.shape[0]): 

    with open('leisa1{}.csv'.format(i), "wb") as outfile: 

     np.savetxt(outfile,i,fmt='%.5f',delimiter=' ',footer='====') 

但運行過程中出現後,我得到了一個錯誤,(我編輯後的評析,第一個錯誤消失,但現在這顯示出來):

ncol = X.shape[1] 

IndexError: tuple index out of range 
+0

#1。修復你的縮進。 #2你認爲錯誤的含義是什麼? –

+0

這很奇怪,你確定你沒有通過'rb'什麼的?你不應該得到那個錯誤。雖然,它不會創建您期望的文件名。相反,你應該迭代'爲我,在枚舉(scidata)數組:' –

+0

nop代碼是exacly,因爲我張貼,我改變了行,但現在我有一個不同的錯誤:IndexError:元組索引超出範圍 –

回答

0

的問題是在這裏:

for i in scidata: 

上面的循環會給你每次766個片中的一個,而不是你在創建.csv文件時使用的索引。

因此,該行更改爲

for i in range(scidata.shape[0]): 
    # code follows 

或在評論中提到,使用:

for idx, slice in enumerate(scidata): 
    # code follows 
+0

我改變了行,但現在我有一個不同的錯誤:IndexError:元組索引超出範圍 –

+0

@JavierSuarez什麼是' scidata'? – kmario23

+0

它是(766L,256L,256L) –