|
From: | David Pruitt |
Subject: | Memory usage |
Date: | Thu, 9 Jan 2003 14:20:14 -0600 |
Here are two functions that I am using to sort through a database prior to analysis. I call these function many times through a particular run. My issue is the consumption of memory through the run. If you recall my previous message, a long run will consume >750MB of memory while I can account for only about 10MB. John Eaton suggested that looping in some functions might lead to virtual memory leaks. I would appreciate any comment on my programming in two example functions.
Thanks for the help.
Example1.m: function [ out, weight, nmax, idx ] = S_out(code, mat1, mat2, S1, S2 ) # # Input: # code - the three-column vector of three-letter reference codes # mat1 - matrix of values: if mat1 is a matrix of # a n-length time series of values for m observations, the m values # are averaged over time. # mat2 - matrix of identifying codes # # Output: # out - m-vector of weighted values # weight - weights # n - largest number of observations for any identifying code # idx - index of codes found in mat2 # m = size(idx,1); n = size(cap_mat,1); if n > 1 mat1_mean = mean(mat1); else mat1_mean = mat1; endif for i = 1:m ix = []; ix = find( idx(i,:) != 0 ); n(i) = size(ix,2); out(i) = sum( mat1_mean( idx(i, ix) ) ); endfor; nmax = max(n);
weight = zeros(m,nmax); imx = find(mat != 0); for i = imx' ix = []; ix = find( idx(i,:) != 0 ); weight(i,ix) = (mat1_mean( idx(i, ix) ))/out(i); endfor;
endfunction;
Example 2: function [ Rtn_val, idx ] = S_Index(mat, code) # # Return the ID-sorted indicies of elements in the input code # # Input: # mat = database values (including several character strings - positions known) # code = the three-letter from the database # S1, S2 = reference indicies # # Output: # Rtn_val = Vector of identification numbers # idx = the set of indicies from the ID-sorted list # # ID = mat(:,1:5); matrix = toascii(mat(:,S1:S2)); c_code = toascii(code);
m = size(code,1); n = size(sec_mat,2); idx = zeros(m,n); Rtn_val = zeros(m,1); for i = 1:m
iz = []; iz1 = []; iz2 = []; iz3 = []; iz1 = find( matrix(:,1) == c_code(i,1) ); iz2 = find( matrix(:,2) == c_code(i,2) ); iz3 = find( matrix(:,3) == c_code(i,3) ); iz = intersection(iz1,iz2); iz = intersection(iz,iz3); n = size(iz,2); idx(i,1:n) = iz; for j = 1:n Rtn_val = str2num(ID(j,1:5)); endfor;
endfor;
endfunction;
David Pruitt, PhD Ashdon Investment Analysis and Reseach, LLC Phone: 931.695.3220 Mobile: 931.639.2477 Fax: 931.695.5545 e-mail: address@hidden
|
[Prev in Thread] | Current Thread | [Next in Thread] |