2011-02-02 12 views
5

मेरे पास MATLAB वर्कस्पेस में जावा सरणी (my_array नीचे दिए गए उदाहरण में) है कि मैं वापस MATLAB सरणी में कनवर्ट करना चाहता हूं।जावा प्रकारों से वापस MATLAB प्रकारों में स्थानांतरित करना

whos my_array 

    Name  Size   Class          

    my_array 20000x1   java.lang.Object[] 

मुझे बाहरी इंटरफेस दस्तावेज़ों में जावा प्रकारों को MATLAB प्रकारों में परिवर्तित करने का तरीका नहीं मिला। मुझे मिली एकमात्र चीज this (MATLAB कोशिकाओं के बारे में प्रलेखन) है जो कहती है कि मैं इस कार्य को करने के लिए MATLAB कक्षों का उपयोग कर सकता हूं।

MATLAB cells का उपयोग करना एक ओवरकिल लगता है, विशेष रूप से जब मैं उसी प्रकार के हजारों तत्वों को संभालने में काम करता हूं (इस मामले में, double)। क्या जावा ऑब्जेक्ट्स को MATLAB के मूल प्रकारों में वापस ले जाने का कोई अन्य तरीका है?

उत्तर

6

उदाहरण:

%# example Object[] array 
my_array = javaArray('java.lang.Object', 5); 
for i=1:5, my_array(i) = java.lang.Double(i); end 

%# convert to MATLAB vector 
M = arrayfun(@(x)x, my_array); 

%# or equivalently 
M = cell2mat(cell(my_array)); 

>> whos M 
    Name  Size   Bytes Class  Attributes 

    M   5x1    40 double  
+0

दूसरा एक ('cell2mat (सेल (...))') बेहतर रूप में यह भी 2 डी सरणियों के लिए काम करता है। – luator

2

जब मैं एक ही प्रकार के तत्वों के हजारों से निपटने कर रहा हूँ (इस मामले में, डबल)

आप प्रश्न में जावा कोड के नियंत्रण में हैं? यदि ऐसा है, तो Double[] सरणी या Object[] सरणी के बजाय double[] वापस करें - MATLAB स्वचालित रूप से double[] सरणी को युगल के MATLAB वेक्टर में परिवर्तित कर देगा।

+0

मैटलैब में 'डबल []' कैसे बनाऊंगा? –

1

ध्यान दें कि आप जावा न्यूमेरिक प्रकारों को मैटलैब आंतरिक में परिवर्तित करने के लिए मैटलैब में डबल फ़ंक्शन का उपयोग कर सकते हैं।

रेफरी http://www.kxcad.net/cae_MATLAB/techdoc/matlab_external/f6671.html#bq__508-1

function rv = convertJava2DToMatlab (javaArray) 
    numrows = max (size (javaArray)); 
    numcols = max (size (javaArray(1,:))); 
    rv (numrows, numcols) = 1; % preallocating the matrix to optimize 
    for i = 1:numrows 
     for j = 1:numcols 
      if (javaArray(i,j) == 1) 
       rv (i,j) = double (javaArray(i,j)); 
      end 
     end 
    end 
end % end of function convertJava2DtoMatlab        
संबंधित मुद्दे