2012-12-11 44 views
7

में एक outputted fortran द्विआधारी NxNxN मैट्रिक्स को पढ़ने के लिए मैं फोरट्रान में एक मैट्रिक्स बाहर लिखा था इस प्रकार है:कैसे अजगर

real(kind=kind(0.0d0)), dimension(256,256,256) :: dense 

[...CALCULATION...] 

inquire(iolength=reclen)dense 
open(unit=8,file=fname,& 
form='unformatted',access='direct',recl=reclen) 
write(unit=8,rec=1)dense(:,:,:) 
close(unit=8) 

मैं इस अजगर में वापस पढ़ना चाहते हैं। मैंने जो कुछ भी देखा है वह 2 डी एनएक्सएन सरणी के लिए 3 डी सरणी नहीं है। मैटलैब में मैं इसे पढ़ सकते हैं के रूप में:

fid = fopen(nfilename,'rb'); 
mesh_raw = fread(fid,ndim*ndim*ndim,'double'); 
fclose(fid); 
mesh_reshape = reshape(mesh_raw,[ndim ndim ndim]); 

मैं सिर्फ अजगर में बराबर की जरूरत है - शायद वहाँ एक समान भार है/उपकरण उपलब्ध नयी आकृति प्रदान। यदि पाइथन को समझने के लिए इसे लिखने के लिए एक और अधिक अनुकूल कॉम्पैक्ट तरीका है, तो मैं सुझावों के लिए खुला हूं। यह शायद कुछ this देखेंगे:। मैं अपने मामले के बराबर वाक्यविन्यास से अपरिचित हूं। एक अच्छा संदर्भ पर्याप्त होगा। धन्यवाद।

+0

struct.unpack जाने का तरीका लगता है लेकिन मुझे यकीन नहीं है कि मेरे मामले के लिए क्या करना है। – Griff

+0

[इनमें से कोई भी तरीका scipy/numpy का उपयोग कर] [http://www.scipy.org/Cookbook/InputOutput#head-b0de67a6dbb3b1ba2584c65263552dc519225cb1) आपकी मदद करता है? –

+0

आपको यहां समाधान मिलेगा: http://stackoverflow.com/questions/10475839/reading-a-direct-access-fortran-unformatted-file-in-python – milancurcic

उत्तर

8

IRO बॉट के लिंक का उपयोग करना मैं/मेरी स्क्रिप्ट (लेकिन numpy जादू कुछ भी नहीं) के लिए इस बनाया संशोधित:

def readslice(inputfilename,ndim): 
    shape = (ndim,ndim,ndim) 
    fd = open(fname, 'rb') 
    data = np.fromfile(file=fd, dtype=np.double).reshape(shape) 
    fd.close() 
    return data 

मैं एक मतलब, अधिकतम, न्यूनतम & घन पर योग और यह मेल खाता था मेरा किलर कोड आपकी सहायता के लिए धन्यवाद.

+0

बस सुनिश्चित करें कि आप खाता सरणी आयाम ऑर्डरिंग अंतर को बीच में लेते हैं फोरट्रान (कॉलम प्रमुख) और पायथन (पंक्ति प्रमुख)। – milancurcic

+0

.reshape (आकार) के अंत में इसे फोर्ट्रान के रूप में पुन: व्यवस्थित करने के लिए कहने का कोई आदेश नहीं है? – Griff

+0

फोरट्रान सरणी को आयाम (आईएम, जेएम, किमी) के रूप में घोषित करने के मामले में, आप इसे पायथन से np.fromfile (फ़ाइल = fd, dtype = np.double) के रूप में पढ़ना चाहते हैं। ताज़ा ((किमी, जेएम, मैं हूँ))। Im = jm = km के मामले में, आपको किसी भी अतिरिक्त कदम की आवश्यकता नहीं है, लेकिन याद रखें कि अंतिम अनुक्रमणिका सबसे तेज़ी से बदलती है। – milancurcic

0

मैं कुछ भी नहीं देख सकता लेकिन प्रत्यक्ष काम यहां काम कर रहा हूं। पाइथन 2-डी सरणी का एक अच्छा काम नहीं करता है, अकेले 3-डी दें, लेकिन कोड के इस बिट को काम करना चाहिए।

fin=open('filename.dat','rb') 
output=[] 
for x in range(0,ndim): 
    xarr=[] 
    for y in range(0,ndim): 
     yarr=[] 
     for z in range(0,ndim): 
      yarr.append(struct.unpack('i', fin.read(4))) 
     xarr.append(yarr) 
    output.append(xarr) 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^