दिलचस्प पोस्ट
क्या सभी JSON ऑब्जेक्ट्स वैध जावास्क्रिप्ट ऑब्जेक्ट हैं? सभी खुली खिड़कियों के शीर्षक प्राप्त करें MySQL में एरे स्टोर कैसे करें? एफ़एलएफ निष्पादन प्रवेश बिंदु फार्म 0x80xxxxx के आभासी पते और 0x0 शून्य क्यों नहीं है? मैं मेवेन के साथ अंतिम जार फाइल के अंदर पुस्तकालय फ़ोल्डर में सभी जरूरी जार फाइल कैसे डालूं? स्प्रिंग बूट जेपीए – ऑटो रीकनेक्ट को कॉन्फ़िगर करना जावास्क्रिप्ट या jQuery के साथ वर्तमान महीने की पहली और अंतिम तिथि प्राप्त करें विशिष्ट तारीख को पास करके सप्ताह का दिन कैसे तय किया जाए? ग्रहण में ग्रहण परियोजना को आयात करते समय सहकर्मी प्रमाणित नहीं होता IE8 / 9 में फ़ॉर्मडाटा जेनरिक और कास्टिंग – मूल वर्ग को विरासत में मिली कक्षा नहीं डाल सकती जावा में दोहरे उद्धरण से बचें कमांड लाइन से एक Zend फ्रेमवर्क क्रिया चलाना सी ++ 11 में यादृच्छिक संख्या पीढ़ी, उत्पन्न करने के तरीके, वे कैसे काम करते हैं? जावास्क्रिप्ट लिंक, "#" या "जावास्क्रिप्ट: शून्य (0)" के लिए कौन सी "href" मान का उपयोग करना चाहिए?

Matlab में आर के प्रतिनिधि के समान कार्य

मैं एक फ़ंक्शन के लिए देख रहा हूँ जो समान रूप से आर के लिए आरएफ में Matlab के rep कार्य करता है उदाहरण के लिए rep साथ मैं निम्नलिखित कर सकता हूँ:

 > rep(c(1,2,3),times=3) [1] 1 2 3 1 2 3 1 2 3 > rep(c(1,2,3),each=3) [1] 1 1 1 2 2 2 3 3 3 > 

Matlab में repmat फ़ंक्शन है जो पहले भाग को पूरा करता है

 >> repmat([1,2,3],1,3) ans = 1 2 3 1 2 3 1 2 3 

लेकिन दूसरे भाग (या कम से कम मैं समझ नहीं सकता कि यह कैसे करना है)

कोई सुझाव?

वेब के समाधान से एकत्रित समाधान "Matlab में आर के प्रतिनिधि के समान कार्य"

आप एक फ़ंक्शन को निम्न रूप से निम्नानुसार बारीकी से आर में प्रतिनिधि समारोह के वाक्य-रचना को पुन: उत्पन्न कर सकते हैं:

 function [result]=rep(array, count) matrix = repmat(array, count,1); result = matrix(:); 

फिर आप किसी पंक्ति या कॉलम वेक्टर से कॉल करके वांछित व्यवहार को पुन: उत्पन्न कर सकते हैं:

 >> rep([1 2 3],3) ans = 1 1 1 2 2 2 3 3 3 >> rep([1 2 3]',3) ans = 1 2 3 1 2 3 1 2 3 

नोट मैंने एक कॉलम वेक्टर (एक 3×1 मैट्रिक्स) के रूप में इनपुट सरणी को पास करने के लिए दूसरे कॉल में ट्रांस्पोज़ (') ऑपरेटर का उपयोग किया है।

मैंने इसे अपने लैपटॉप पर बेंचमार्क किया और 100,000 तत्वों के साथ 100,000 तत्वों के साथ मूल सरणी के लिए उपरोक्त छत विकल्प का उपयोग करते हुए 2 से 8 गुना तेजी के बीच था, इस पर निर्भर करता है कि क्या आप पहले या दूसरी व्यवस्था चाहते हैं।

अच्छा प्रश्न +1 यह पूरा करने के लिए एक साफ एक-लाइनर विधि क्रोनकेर टेंसर उत्पाद के माध्यम से है, जैसे:

 A = [1 2 3]; N = 3; B = kron(A, ones(1, N)); 

फिर:

 B = 1 1 1 2 2 2 3 3 3 

अद्यतन करें: @ डैन ने एक बहुत ही साफ समाधान प्रदान किया है जो कि मेरे kron पद्धति से अधिक कुशल दिखता है, इसलिए पृष्ठ छोड़ने से पहले उत्तर दें 🙂

अद्यतनः @ बीकिंगिंग ने एक अच्छा समाधान भी प्रदान किया है जो कि इनपुट वेक्टर बड़ा होने पर बहुत अच्छी तरह से स्केल किया जाना चाहिए।

अगर मुझे पसंद है तो आपको यह पता नहीं है कि क्रोनकेर टेंसर उत्पाद क्या है, इस में अधिक दिलचस्पी हो सकती है (और वास्तव में मैं तेजी से सोचता हूं) समाधान:

 c(ceil((1:length(c)*n)/n)); 

इसलिए यहां मैट्रिक्स को दोहराने के लिए मैं वेक्टर इंडेक्सिंग का इस्तेमाल किया। उदाहरण के लिए, आपके ऊपर दिए गए दो मामलों का उपयोग करके हम ऐसा कर सकते हैं:

 c = 1:3; c([1 1 1 2 2 2 3 3 3]) %for each c([1 2 3 1 2 3 1 2 3]) %for times 

इसलिए सवाल है कि हम किस प्रकार की कार्यक्षमता का अनुरोध कर रहे हैं बिना वेक्टर [1 2 3 1 2 3 1 2 3] कैसे बनाते हैं। इसलिए मैंने उन तत्वों की संख्या के साथ एक वेक्टर बना दिया है, जो 1: 9 की आवश्यकता होती है और फिर तीन और राउंड अप से विभाजित (यानी कमांड लाइन में ceil((1:9)/3) कोशिश करो ceil((1:9)/3)

बेंचमार्किंग का एक सा (मुझे पता है कि यह सामान छोरों में होना चाहिए, इसलिए यह बहुत सटीक नहीं है):

 c = 1:3; n = 3; tic; k = kron(c, ones(1, n)); toc; % 0.000208 seconds. tic; a = c(ceil((1:length(c)*n)/n)); toc; % 0.000025 seconds. clear; c = 1:1000000; n = 3; tic; k = kron(c, ones(1, n)); toc; % 0.143747 seconds. tic; a = c(ceil((1:length(c)*n)/n)); toc; % 0.090956 seconds. clear; c = 1:10000; n = 1000; tic; k = kron(c, ones(1, n)); toc; % 0.583336 seconds. tic; a = c(ceil((1:length(c)*n)/n)); toc; % 0.237878 seconds. 

यहां एक विचार है:

 a=[1,2,3]; reshape(repmat(a,1,length(a)),1,length(a)^2) ans = 1 2 3 1 2 3 1 2 3 reshape(repmat(a,length(a),1),1,length(a)^2) ans = 1 1 1 2 2 2 3 3 3 

मुझे अभी तक कोई सरल कार्य नहीं मिल रहा है जो कि यह एक ही चरण में करता है, अगर कोई दिलचस्पी है, हालांकि एक है।