www.gusucode.com > nnet 工具箱 matlab 源码程序 > nnet/nnprocess/+fixunknowns/create.m
function [y,settings] = create(x,param) %PROCESSPCA.FIXUNKNOWNS Create settings for processing values % Copyright 2012-2015 The MathWorks, Inc. % Get info from X which may be MATLAB array or gpuArray unknown_rows = iGather(any( isnan( x ), 2 ).'); settings.xrows = size(x,1); settings.yrows = settings.xrows + sum(unknown_rows); settings.unknown = find(unknown_rows); settings.known = find(~unknown_rows); settings.shift = [0 cumsum(unknown_rows(1:(end-1)))]; settings.xmeans = iFiniteMeans( x ); settings.xknown = settings.known; settings.xunknown = settings.unknown; settings.yknown = settings.known + settings.shift(settings.known); settings.yunknown = settings.unknown + settings.shift(settings.unknown); settings.yflags = settings.yunknown+1; % Check whether processing has any effect settings.no_change = isempty(settings.unknown); % Apply y = fixunknowns.apply(x,settings); end function xmeans = iFiniteMeans( x ) numRows = size( x, 1 ); xmeans = zeros( numRows, 1 ); for i = 1:numRows xmeans(i) = iFiniteMeanForRow( x(i,:) ); end end function xmean = iFiniteMeanForRow( row ) xi = iGather(row); xi = xi(isfinite(xi)); if isempty(xi) xmean = 0; else xmean = mean(xi); end end function x = iGather( x ) if isobject( x ) try %#ok<TRYNC> x = gather( x ); end end end