⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subsref.m

📁 张量分析工具
💻 M
字号:
function a = subsref(t,s)%SUBSREF Subscripted reference for tensors.%%   We can extract elements or subtensors from a tensor in the%   following ways.%%   Case 1a: y = X(i1,i2,...,iN), where each in is an index, returns a%   scalar.%%   Case 1b: Y = X(R1,R2,...,RN), where one or more Rn is a range and%   the rest are indices, returns a sparse tensor.%%   Case 2a: V = X(S) or V = X(S,'extract'), where S is a p x n array%   of subscripts, returns a vector of p values.%%   Case 2b: V = X(I) or V = X(I,'extract'), where I is a set of p%   linear indices, returns a vector of p values.%%   Any ambiguity results in executing the first valid case. This%   is particularly an issue if ndims(X)==1.%%   Examples%   X = tensor(rand(3,4,2,1),[3 4 2 1]);%   X(1,1,1,1) %<-- produces a scalar%   X(1,1,1,:) %<-- produces a tensor of order 1 and size 1%   X(:,1,1,:) %<-- produces a tensor of size 3 x 1%   X(1:2,[2 4],1,:) %<-- produces a tensor of size 2 x 2 x 1%   X(1:2,[2 4],1,1) %<-- produces a tensor of size 2 x 2%   X([1,1,1,1;3,4,2,1]) %<-- returns a vector of length 2%   X = tensor(rand(10,1),10);%   X([1:6]') %<-- extracts a subtensor%   X([1:6]','extract') %<-- extracts a vector of 6 elements%%   See also TENSOR, TENSOR/FIND.%%MATLAB Tensor Toolbox.%Copyright 2007, Sandia Corporation.% This is the MATLAB Tensor Toolbox by Brett Bader and Tamara Kolda.% http://csmr.ca.sandia.gov/~tgkolda/TensorToolbox.% Copyright (2007) Sandia Corporation. Under the terms of Contract% DE-AC04-94AL85000, there is a non-exclusive license for use of this% work by or on behalf of the U.S. Government. Export of this data may% require a license from the United States Government.% The full license terms can be found in tensor_toolbox/LICENSE.txt% $Id: subsref.m,v 1.15 2007/01/10 01:27:31 bwbader Exp $switch s(1).type    case '{}'        error('Cell contents reference from a non-cell array object.')    case '.'        fieldname = s(1).subs;        switch fieldname            case 'data'                a = tt_subsubsref(t.data,s);            case 'size'                a = tt_subsubsref(t.size,s);            otherwise                error(['No such field: ', fieldname]);        end    case '()'        % *** CASE 1: Rectangular Subtensor ***        if (numel(s(1).subs) == ndims(t)) && ~isequal(s(1).subs{end},'extract')            % Copy the subscripts            region = s(1).subs;            if numel(region) ~= ndims(t)                error('Invalid number of subscripts');            end            % Extract the data            newdata = t.data(region{:});            % Determine the subscripts            newsiz = [];                % (future) new size            kpdims = [];                % dimensions to keep            rmdims = [];                % dimensions to remove            % Determine the new size and what dimensions to keep            for i = 1:length(region)                if ischar(region{i}) && (region{i} == ':')                    newsiz = [newsiz size(t,i)];                    kpdims = [kpdims i];                elseif numel(region{i}) > 1                    newsiz = [newsiz numel(region{i})];                    kpdims = [kpdims i];                else                    rmdims = [rmdims i];                end            end            % If the size is zero, then the result is returned as a scalar;            % otherwise, we convert the result to a tensor.            if isempty(newsiz)                a = newdata;            else                if isempty(rmdims)                    a = tensor(newdata,newsiz);                else                    a = tensor(permute(newdata,[kpdims rmdims]),newsiz);                end            end            a = tt_subsubsref(a,s);            return;        end        % *** CASE 2a: Subscript indexing        if size(s(1).subs{1},2) == ndims(t)            % extract array of subscripts            subs = s(1).subs{1};            a = t.data(tt_sub2ind(t.size,subs));            a = tt_subsubsref(a,s);            return;        end        % *** CASE 2b: Linear indexing ***        if numel(s(1).subs) ~= 1            error('Invalid indexing');        end        idx = s(1).subs{1};        if ndims(idx) ~=2 || size(idx,2) ~= 1            error('Expecting a column index');        end        a = t.data(idx);        a = tt_subsubsref(a,s);        return;end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -