खोज…


textscan

मान लें कि आपने एक बड़ी टेक्स्ट फ़ाइल या स्ट्रिंग में डेटा फॉर्मेट किया है, जैसे

Data,2015-09-16,15:41:52;781,780.000000,0.0034,2.2345
Data,2015-09-16,15:41:52;791,790.000000,0.1255,96.5948
Data,2015-09-16,15:41:52;801,800.000000,1.5123,0.0043

एक यह काफी तेजी से पढ़ने के लिए textscan का उपयोग कर सकते हैं। ऐसा करने के लिए, fopen साथ पाठ फ़ाइल की फ़ाइल पहचानकर्ता प्राप्त करें:

fid = fopen('path/to/myfile');

इस उदाहरण में डेटा के लिए मान लें, हम पहले कॉलम "डेटा" को अनदेखा करना चाहते हैं, तार के रूप में दिनांक और समय पढ़ें, और शेष कॉलमों को डबल्स के रूप में पढ़ें, अर्थात

 Data  ,  2015-09-16  , 15:41:52;801  , 800.000000  , 1.5123  ,  0.0043
ignore      string         string         double      double     double

ऐसा करने के लिए, कॉल करें:

data = textscan(fid,'%*s %s %s %f %f %f','Delimiter',',');

%*s में तारांकन का अर्थ है "इस कॉलम को अनदेखा करें"। %s अर्थ है "एक स्ट्रिंग के रूप में व्याख्या"। %f अर्थ है "युगल के रूप में व्याख्या करना (तैरना)"। अंत में, 'Delimiter',',' कहा गया है कि सभी कॉमा को प्रत्येक स्तंभ के बीच सीमांकक के रूप में व्याख्या की जानी चाहिए।

सारांश में:

fid = fopen('path/to/myfile');
data = textscan(fid,'%*s %s %s %f %f %f','Delimiter',',');

data अब एक सेल में प्रत्येक कॉलम के साथ एक सेल एरे होता है।

तिथि और समय तेजी से संख्यात्मक सरणी के लिए

संख्यात्मक सरणियों के लिए दिनांक और समय के तार को datenum साथ किया जा सकता है, हालांकि किसी बड़ी डेटा फ़ाइल को पढ़ने में आधे से अधिक समय लग सकता है।

उदाहरण के लिए टेक्ससकैन में डेटा पर विचार करें। द्वारा, फिर से, textcancan और पूर्णांक के रूप में दिनांक और समय की व्याख्या करते हुए, वे तेजी से एक संख्यात्मक सरणी में परिवर्तित हो सकते हैं।

उदाहरण डेटा में एक पंक्ति को इस प्रकार समझा जाएगा:

 Data , 2015  - 09  -  16  ,  15  :  41  :  52  ;  801 , 800.000000 , 1.5123 , 0.0043
ignore double double double double double double double    double     double   double

जो इस प्रकार पढ़ा जाएगा:

fid = fopen('path/to/myfile');
data = textscan(fid,'%*s %f %f %f %f %f %f %f %f %f %f','Delimiter',',-:;');
fclose(fid);

अभी:

y = data{1};          % year
m = data{2};          % month
d = data{3};          % day
H = data{4};          % hours
M = data{5};          % minutes
S = data{6};          % seconds
F = data{7};          % milliseconds

% Translation from month to days
ms = [0,31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; 

n = length(y);        % Number of elements
Time = zeros(n,1);    % Declare numeric time array

% Algorithm for calculating numeric time array
for k = 1:n
    Time(k) = y(k)*365 + ms(m(k)) + d(k) + floor(y(k)/4)...
              - floor(y(k)/100) + floor(y(k)/400) + (mod(y(k),4)~=0)...
              - (mod(y(k),100)~=0) + (mod(y(k),400)~=0)...
              + (H(k)*3600 + M(k)*60 + S(k) + F(k)/1000)/86400 + 1;
end

566,678 तत्वों पर डेटेनम का उपयोग करना datenum सेकंड की आवश्यकता है, जबकि आवश्यक विधि 0.048334 सेकंड से ऊपर है, यानी datenum या ~ 137 गुना तेजी से समय का 0.73%।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow