दिलचस्प पोस्ट
Android के साथ एक shoutcast सुनें सॉकेट.ओ 1.0 में कक्ष की क्लाइंट सूची कैसे प्राप्त करें सी # विन्फॉर्म प्रोग्रेसबार और पृष्ठभूमिवर्कर जावास्क्रिप्ट में, क्या यह पता लगाने का एक आसान तरीका है कि संपत्ति की संपत्ति मौजूद है या नहीं? एंड्रॉइड में देशी फोनबुक से संपर्क कैसे प्राप्त करें बैच फ़ाइल में मौजूदा निर्देशिका क्या है? एक 32-बिट चर 32 बिट स्थानांतरण के बारे में क्या बुरा है? कहाँ है gacutil.exe? जहां उपयोगकर्ता अपलोड से छवियों को बचाने के लिए सबसे अच्छी जगह है SQL सर्वर 2005 ROW_NUMBER () बिना ORDER द्वारा पायथन में एक वीडियो की अवधि कैसे प्राप्त करें? डिवाइस का स्क्रीन आकार कैसे प्राप्त करें? मैं कोड को पहले माइग्रेशन कैसे अक्षम कर सकता हूं डीबगिंग जानकारी नहीं मिली है या विज़ुअल स्टूडियो के मेल नहीं खाती आईफोन एसडीके 3.0 में शेक एपीआई का उपयोग कैसे करें?

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 

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

कोई सुझाव?

Solutions Collecting From Web of "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 

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