2010-05-05 11 views
8

अरे, परेशानी का सामना करना पड़ा। एक सरणी के विभिन्न मानों के लिए एक चर लंबाई 1 डी सरणी असाइन करने का प्रयास कर रहा है, उदा।'सरणी का ऐरे'?

??? In an assignment A(I) = B, the number of elements in B and 
I must be the same. 

Error in ==> lab2 at 15 
a(1) = [1, 0.13,0.52,0.3]; 

मुझे लगता है इसका मतलब है कि यह एक सरणी के बजाय एक अदिश मूल्य की उम्मीद कर रहा है:

a(1) = [1, 0.13,0.52,0.3]; 
a(2) = [1, 0, .268]; 

हालांकि, मैं त्रुटि मिलती है। क्या कोई जानता है कि इस मान को सरणी कैसे असाइन करें?

मैं नहीं बल्कि के रूप में यह एक पाश

संपादित में विभिन्न समस्याओं के समाधान कर रहे हैं के लिए है एक 2d सरणी के रूप में सीधे इसे परिभाषित नहीं चाहते हैं: मिल गया!

ए (1,1: 4) = [1, 0.13,0.52,0.3];

ए (2,1: 3) = [1, 0, .268];

+0

आप शामिल हैं एक preallocated? यदि हां, तो कैसे? –

+0

मैंने इसे preallocated नहीं किया है, मुझे नहीं लगता कि मुझे – bcoughlan

+0

की आवश्यकता है जहां तक ​​मुझे पता है, यह सरणी के साथ नहीं किया जा सकता है। यदि आप एक सरणी को एक ही पते में स्टोर करना चाहते हैं, तो सेल या स्ट्रक्चर डेटा प्रकारों को आज़माएं। अगर मैं विशेष रूप से पूछ सकता हूं, तो 2 डी सरणी का उपयोग करने से आपको क्या रोक रहा है? –

उत्तर

13

क्या आप शायद लिखना चाहता था

a(1,:) = [1, 0.13,0.52,0.3]; 
a(2,:) = [1, 0, .268]; 

यानी पहली पंक्ति [1, 0.13,0.52,0.3] है और दूसरी पंक्ति [1, 0, .268] है। यह संभव नहीं है, क्योंकि एक (2,4) का मूल्य क्या होगा?

समस्या को ठीक करने के दो तरीके हैं।

(1) का प्रयोग करें सेल सरणियों

a{1} = [1, 0.13,0.52,0.3]; 
a{2} = [1, 0, .268]; 

(2) यदि आप अपने समाधान होगा स्तंभों की अधिकतम संभव संख्या पता है, आप अपने सरणी preallocate कर सकते हैं, और इसलिए की तरह परिणामों में लिखना (यदि आप preallocate नहीं है, आप शून्य गद्दी पाने हूँ। तुम भी नीचे अपने पाश एक बहुत धीमा जोखिम है, अगर वहाँ कई पुनरावृत्तियों कर रहे हैं, क्योंकि सरणी हर यात्रा पर फिर से बनाना होगा।

a = NaN(nIterations,maxNumCols); %# this fills the array with not-a-numbers 

tmp = [1, 0.13,0.52,0.3]; 
a(1,1:length(tmp)) = tmp; 
tmp = [1, 0, .268]; 
a(2,1:length(tmp)) = tmp; 
+0

विधि (1) के साथ यदि आप जानते थे कि प्रत्येक सरणी कितनी देर तक होगी (उनमें से सभी अलग-अलग लंबाई) क्या आप एक तरीका 'ए' शुरू कर सकते हैं ताकि आप स्मृति को पूर्ववत कर सकें? – Edd

+1

@clairharrison: हाँ। '[एक {1:33}] = सौदा (शून्य (20,4)); 'ध्यान दें कि यदि' ए' पहले घोषित किया गया है, तो आपको या तो इसे साफ़ करना होगा या स्पष्ट रूप से सेल सरणी को' ए = सेल 'घोषित करना होगा (1,33) '। – Jonas

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