0

次のエラーが表示されます。

b = cellfun(@(x) nansum(mag.*subsref(cross(u{1},x), struct('type', '()', 'subs', {':',':',3})) ),r,'UniformOutput',false);

??? Error using ==> subsref
The "subs" field for the subscript argument to SUBSREF and SUBSASGN must be a cell or character array.

Error in ==> cellcross>@(x)nansum(mag.*subsref(cross(u{1},x),struct('type','()','subs',{':',':',3}))) at 2
    b = cellfun(@(x) nansum(mag.*subsref(cross(u{1},x), struct('type', '()', 'subs', {':',':',3})) ),r,'UniformOutput',false);

Error in ==> cellcross at 2
    b = cellfun(@(x) nansum(mag.*subsref(cross(u{1},x), struct('type', '()', 'subs', {':',':',3})) ),r,'UniformOutput',false); 

誰でも理由を教えてもらえますか?

Matlab 2011 を使用しています。

4

1 に答える 1

3

セル配列をフィールドの 1 つとして struct を呼び出すと、そのセル配列の内容が要素に分散されている構造体の配列が得られます。これは で発生しstruct('type', '()', 'subs', {':',':',3})ます。

私はかつて、この「機能」を回避するためにいくつかのコードを書きました:

function newStruct = structWithCell(varargin)
  % Constructs a structure with cell variables as MATLAB would make a struct
  % array by using the equivalent struct() call
  % Setting values to cell() straight away doesn't work unfortunately
  % as MATLAB(R) interprets structs with cell values as a cell array of structs.
  assert(mod(nargin,2)==0,'An even number of arguments is expected');
  newStruct = struct();
  keys      = varargin(1:2:end-1);
  values    = varargin(2:2:end);
  for iKV = 1:numel(keys)
      newStruct.(keys{iKV}) = values{iKV};
  end
end

への呼び出しを上記の関数への呼び出しに置き換えるとstruct、問題なく動作するはずです。

または、その部分を に変更することもできますstruct('type', '()', 'subs', {{':',':',3}})。このようにして、単一のセル配列を含むセル配列を渡します。これにより、必要なものも得られます。

于 2012-09-08T22:14:13.537 に答える