2017-01-19 13 views
6

MATLAB में बहुआयामी सरणी को परिभाषित करने का एक आसान तरीका है उदा।मैं पाइथन में बहुआयामी सरणी कैसे परिभाषित कर सकता हूं?

A(:,:,1) = [1,2,3; 4,5,6]; 
A(:,:,2) = [7,8,9; 10,11,12]; 

>> A 

A(:,:,1) = 

1  2  3 
4  5  6 


A(:,:,2) = 

7  8  9 
10 11 12 

जहां पहले दो सूचकांक क्रमशः, पंक्तियों और स्तंभों ith मैट्रिक्स के लिए एक में जमा हो जाती है (या पेज, नीचे चित्र देखें);

enter image description here

किसी को भी पता है कि कैसे मैं अजगर में एक ही संरचना परिभाषित कर सकते हैं?

+3

** उपयोग NumPy ** के समान है। यह पाइथन में मैटलैब की तरह है। – RemcoGerlich

उत्तर

8
NumPy अनुक्रमण साथ

MATLAB

import numpy as np 
A=np.empty((2,3,3)) 
A.shape 
#(2L, 3L, 3L) 
A[0,1,2] # element at index 0,1,2 
#0.0 
A[0,:,:] # 3x3 slice at index 0 
#array([[ 0., 0., 0.], 
#  [ 0., 0., 0.], 
#  [ 0., 0., 0.]]) 
A[1,1,:] # 1-D array of length 3 
#array([ 0., 0., 0.] 
+3

शायद आपको 'आयात' कथन भी दिखाना चाहिए क्योंकि आप 'एनपी' का उपयोग करते हैं और यह आपके उत्तर को "अधिक डिब्बाबंद" बनाता है। +1। –

+2

यह भी ध्यान दें कि MATLAB में आम तौर पर 'ए (एक्स, वाई, जेड)' को अनुक्रमित किया जाता है जबकि पाइथन गणित करते समय 'ए [जेड, वाई, एक्स]' का पालन करता है –

+0

हां, ब्रांड्स और ब्रैकेट में अंतर, लेकिन अनुक्रमण शैली वही हैं, 'matlab'' पायथन 'के 0-आधारित अनुक्रमण के बजाय' आर 'जैसे 1-आधारित अनुक्रमण का उपयोग करता है। –

8

शुद्ध पायथन ऐसा करने का तरीका सूचियों की सूची (या इस मामले में सूचियों की सूचियों की सूची) का उपयोग कर रहा है। आप सूची समझ के साथ इसे शुरू कर सकते हैं। उदाहरण के लिए:

w = 4 #width 
h = 3 #height 
d = 3 #depth 

data = [[[0]*h for _ in range(w)] for _ in range(d)] 

या आप आंकड़े पर की तरह tuples के साथ टेन्सर को भरने के लिए चाहते हैं:

data = [[[(i+1,j+1,k+1) for k in range(h)] for j in range(w)] for i in range(d)] 

यह एक d एक्स w एक्स h "मैट्रिक्स" शून्य से भर initializes।

फिर आप के साथ (i,j,k) वें तत्व पहुंच सकता है:

data[i][j][k] 

फिर भी तरह पुस्तकालय हैं कि वैक्टर, मैट्रिक्स, tensors के लिए समर्थन कर रहे हैं, आदि

+0

ठीक है, आपके उत्तर के लिए धन्यवाद! तो मुझे लगता है कि मैं जो करने की कोशिश कर रहा हूं वह सरणी की एक सूची है, ए = [सरणी ([[1,2,3], [4,5,6]]), सरणी ([5, 6,7], [7,8,9]])] हालांकि, ए में पहली सरणी की प्रत्येक पंक्ति के केवल पहले तत्वों को कॉल करने का कोई तरीका है? मैटलैब में कुछ ऐसा होगा (:, 1,1)। धन्यवाद! – S88S

+0

@ एस 88 एस: जहां तक ​​मुझे पता नहीं है। उस स्थिति में आप बेहतर संख्या का उपयोग करते हैं: numpy वास्तव में मैट्रिक्स करने के लिए है, ... गणना जबकि पायथन स्वयं निश्चित रूप से एक सामान्य उद्देश्य प्रोग्रामिंग भाषा है। –

2

यदि आप करने को तैयार हैं NumPy का उपयोग करें तो plenty of ways है। एक तरीका यह है कि सभी शून्यों के साथ आरंभ करना होगा या, जैसा कि आपके अपडेट किए गए उदाहरण में, आप एक श्रेणी और फिर reshape भर सकते हैं।

import numpy as np 

a = np.arange(48, dtype=np.int64).reshape((3, 4, 4)) 
# or 
b = np.zeros((3, 4, 4), dtype=np.int64) 
संबंधित मुद्दे