मैं निम्नलिखित MATLAB आपरेशन vectorize करने के लिए कोशिश कर रहा हूँ:एक सदिश द्वारा अनुक्रमित स्थानों पर लोगों के साथ एक शून्य से भरे 2 डी सरणी बनाएँ
अनुक्रमित के साथ एक स्तंभ वेक्टर देखते हुए, मैं साथ ही एक मैट्रिक्स चाहते कॉलम की पंक्तियों की संख्या और कॉलम की एक निश्चित संख्या। मैट्रिक्स शून्य के साथ प्रारंभ किया गया है और इसमें इंडेक्स द्वारा निर्दिष्ट स्थानों में से एक है।
y = [1; 3; 2; 1; 3]; m = size(y, 1); % For loop yvec = zeros(m, 3); for i=1:m yvec(i, y(i)) = 1; end
वांछित परिणाम है:
यहाँ स्क्रिप्ट का एक उदाहरण मैं पहले से ही लिखा है है
yvec =
1 0 0
0 0 1
0 1 0
1 0 0
0 0 1
क्या यह संभव है पाश के लिए बिना एक ही परिणाम प्राप्त करने के ? मैंने इस तरह कुछ करने की कोशिश की:
% Vectorization (?)
yvec2 = zeros(m, 3);
yvec2(:, y(:)) = 1;
लेकिन यह काम नहीं करता है।
मैं विशेष रूप से दूसरा दृष्टिकोण की तरह :) – Muffo
इसके अलावा यह प्रतीत होता है 'yvec' y'' की अधिकतम करने के लिए बराबर स्तंभों की संख्या है, के लिए बहुत दूसरा दृष्टिकोण आपके पास एक सामान्यीकृत संस्करण हो सकता है 'yvec = bsxfun (@eq, 1: max (y), y) '। – Divakar
या, केवल ऑक्टेट में, '(1: 3) == y' जो [प्रसारण] के साथ दृष्टिकोण 2 है (https://www.gnu.org/software/octave/doc/v4.0.1/Broadcasting.html) । – ederag