2013-02-17 20 views
13

मेरे पास एक वेक्टर x = (1, 2, 3) है और मैं इसे Answer: (1, 2, 3) के रूप में प्रदर्शित (प्रिंट) करना चाहता हूं।Matlab में वेक्टर (प्रिंट) वेक्टर कैसे प्रदर्शित करें?

मैं कोशिश की है कई दृष्टिकोण, सहित:

disp('Answer: ') 
strtrim(sprintf('%f ', x)) 

लेकिन मैं अभी भी यह प्रारूप है जो मैं की जरूरत है मुद्रित करने के लिए नहीं मिल सकता है।

क्या कोई मुझे समाधान के लिए इंगित कर सकता है, कृपया?

संपादित करें: दोनों मूल्यों और (की लम्बाई) x पहले से ज्ञात नहीं हैं।

उत्तर

21

मैं निम्नलिखित पसंद करते हैं, जो क्लीनर:

x = [1, 2, 3]; 
g=sprintf('%d ', x); 
fprintf('Answer: %s\n', g) 

जो आउटपुट

Answer: 1 2 3 
+0

अच्छा! धन्यवाद। :) –

+0

इस उत्तर के साथ समस्या यह है कि एक मैट्रिक्स के लिए, सभी पंक्तियों को रेखांकित किया जाएगा। – Pedro77

+0

दाएं, स्प्रिंटफ का उपयोग केवल सरणी तर्क के साथ किया जा सकता है, इसलिए मैट्रिस फ़्लैट हो जाते हैं। आपको इसे प्रत्येक पंक्ति में लागू करना चाहिए और परिणाम को जोड़ना चाहिए। –

1

आप इस तरह से कोशिश कर सकते हैं:

fprintf('%s: (%i,%i,%i)\r\n','Answer',1,2,3) 

मुझे आशा है कि इस मदद करता है।

+0

अपने जवाब के लिए धन्यवाद है मुद्रित करने के लिए है, लेकिन मैं इस कार्यक्रम को चलाने से पहले उत्तर नहीं पता:

x = [1, 2, 3]; fprintf('Answer: (%s)\n', strjoin(cellstr(num2str(x(:))),', ')); 

यह परिणाम है। सोचा, यह स्पष्ट है। इसके अलावा, मुझे परिणामस्वरूप वेक्टर की लंबाई भी नहीं पता है। तो मुझे कुछ सामान्य समाधान की ज़रूरत है। –

+3

क्षमा करें, मैंने अभी आपकी पोस्ट का उत्तर दिया है: मुझे लगता है कि आप किसी भी तरह से बता सकते हैं कि आप समस्या के सामान्य दृष्टिकोण की तलाश में हैं। – fpe

6

आप

x = [1, 2, 3] 
disp(sprintf('Answer: (%d, %d, %d)', x)) 

का उपयोग इस

Answer: (1, 2, 3) 

में परिणाम है मनमाने ढंग से आकार के वैक्टर के लिए, आप

disp(strrep(['Answer: (' sprintf(' %d,', x) ')'], ',)', ')')) 

उपयोग कर सकते हैं कर सकते हैं एक वैकल्पिक तरीका होगा

disp(strrep(['Answer: (' num2str(x, ' %d,') ')'], ',)', ')')) 
+2

'fprintf ('% s% s \ b \ b% s \ n ',' उत्तर: (', sprintf ('% d, ', x),') '); ' अधिक स्पष्ट लगता है, और नहीं '(' –

+0

@RomanShapovalov के बाद आउटपुट स्पेस: मैंने बैकस्पेस '\ b' से बचने की कोशिश की क्योंकि अगर आप किसी फ़ाइल में आउटपुट कैप्चर करते हैं, तो इसमें शाब्दिक बैकस्पेस होंगे। –

+0

समझ में आता है।अत्यधिक स्थान से बचने के लिए आप ''% d' प्रिंट करने के लिए अपने कोड को संशोधित कर सकते हैं, (' स्पेस की स्थिति को नोट करें) और फिर '', '' '' '' '' '' '' '' '' '' '' '' '' '' '' –

1

यहाँ एक अधिक सामान्य समाधान है कि के सभी तत्वों को प्रिंट है x इस प्रारूप में वेक्टर x:

x=randperm(3); 
s = repmat('%d,',1,length(x)); 
s(end)=[]; %Remove trailing comma 

disp(sprintf(['Answer: (' s ')'], x)) 
+0

अंतिम पंक्ति को सिर्फ 'disp ([' 'उत्तर: (' s ')'] पढ़ना नहीं चाहिए; '? –

+0

@ एच। मस्टर जो एक्स के मानों को पास नहीं करेगा, यह प्रिंट करेगा: 'उत्तर: (% d,% d,% d) '। ध्यान दें कि repmat सिर्फ सिंटैक्स –

+0

बनाता है आप सही हैं; मैंने आपके कोड की दूसरी पंक्ति को गलत तरीके से पढ़ा और इसलिए अंतिम पंक्ति को गलत समझा। –

3

यहां एक और दृष्टिकोण है जो Matlab के strjoin फ़ंक्शन का लाभ उठाता है। strjoin के साथ मूल्यों के बीच delimiter को अनुकूलित करना आसान है। Answer: (1, 2, 3)

0

एक वेक्टर जो संभवतः जटिल numbers-

fprintf('Answer: %s\n', sprintf('%d ', num2str(x))); 
संबंधित मुद्दे