标签: matlab-struct

迭代MATLAB中的struct fieldnames

我的问题很容易归纳为:"为什么以下不起作用?"

teststruct = struct('a',3,'b',5,'c',9)

fields = fieldnames(teststruct)

for i=1:numel(fields)
  fields(i)
  teststruct.(fields(i))
end
Run Code Online (Sandbox Code Playgroud)

输出:

ans = 'a'

??? Argument to dynamic structure reference must evaluate to a valid field name.
Run Code Online (Sandbox Code Playgroud)

特别是因为teststruct.('a') 确实有效.并fields(i)打印出来ans = 'a'.

我无法理解它.

matlab matlab-struct

69
推荐指数
3
解决办法
10万
查看次数

如何动态访问结构字段?

我有一个具有许多字段的结构,这些字段是不同长度的向量.我想按顺序访问循环中的字段.我试过getfield如下,但MATLAB不喜欢这样.我怎样才能做到这一点?

S = struct('A', [1 2], 'B',[3 4 5]);
SNames = fieldnames(S);
for loopIndex = 1:2
  field = getfield(S, SNames(loopIndex));
  %do stuff w/ field
end
??? Index exceeds matrix dimensions
Run Code Online (Sandbox Code Playgroud)

我首先使用结构,因为数组会遇到不同字段长度的问题.还有更好的选择吗?

matlab matlab-struct

32
推荐指数
3
解决办法
9万
查看次数

如何在MATLAB中对结构数组进行排序?

我正在使用MATLAB中使用颜色直方图交集的图像检索系统.此方法为我提供以下数据:表示直方图交叉距离的实数和图像文件名.因为它们是不同的数据类型,我将它们存储在具有两个字段的结构数组中,然后我将此结构保存在.mat文件中.现在我需要根据直方图交叉距离按降序对此结构进行排序,以便检索具有最高直方图交叉距离的图像.我已经尝试了很多方法来对这些数据进行排序但没有结果.请问你能帮我解决这个问题吗?

arrays sorting matlab matlab-struct

10
推荐指数
2
解决办法
3万
查看次数

为什么MATLAB对结构数组赋值中的字段顺序敏感?

首先,我指定A为结构和其他两个结构:B具有相同的元素顺序,并C具有不同的元素顺序.

A.x = 11;
A.y = 11;

B.x = 21;
B.y = 22;

C.y = 31;   %// Note that I am specifying
C.x = 32;   %// y first and x second

A = B;      %// Works fine
A = C;      %// Works fine
Run Code Online (Sandbox Code Playgroud)

分配ABC工作,这是我对结构的期望 - 元素的顺序无关紧要.

现在,我指定A为结构数组,而不是一个结构,并试图转让其要素之一B,并C分别为:

clear;

A(1).x = 11;
A(1).y = 12;

B.x = 21;
B.y = 22;

C.y = …
Run Code Online (Sandbox Code Playgroud)

arrays matlab struct matlab-struct

10
推荐指数
1
解决办法
737
查看次数

如何格式化字符串以用作MATLAB中的结构字段名称?

我想从字符串中删除连字符(-),斜杠(/)和空格() from a string name(i)以便我可以将其用作结构字段名称.

这是我目前正在使用该功能的丑陋方式strrep:

cell2mat(strrep(strrep(strrep(name(i), '-',''),'/',''),' ', ''))
Run Code Online (Sandbox Code Playgroud)

我也尝试了其他变体,例如:

strrep(name(i),{'-','/'},{'',''});
strrep(name(i),['-','/'],['','']);
Run Code Online (Sandbox Code Playgroud)

什么是更有效的方法呢?

string matlab field matlab-struct

9
推荐指数
2
解决办法
6285
查看次数

结构和空单元格数组的MATLAB"bug"(或非常奇怪的行为)

我不知道这里发生了什么.我正在使用R2006b.在我提交错误报告之前,任何有新版本的人都可以测试他们是否得到相同的行为?

代码:( bug1.m)

function bug1
S = struct('nothing',{},'something',{});
add_something(S, 'boing');          % does what I expect
add_something(S.something,'test');  % weird behavior
end

function add_something(X,str)
    disp('X=');
    disp(X);
    disp('str=');
    disp(str);
end
Run Code Online (Sandbox Code Playgroud)

输出:

>> bug1
X=
str=
boing
X=
test
str=
??? Input argument "str" is undefined.

Error in ==> bug1>add_something at 11
    disp(str);

Error in ==> bug1 at 4
add_something(S.something,'test');
Run Code Online (Sandbox Code Playgroud)

看起来像空虚/虚无S.something允许它移动函数调用的参数.这看起来像非常糟糕的行为.在短期内我想找到它周围(我正在尝试创建一个函数,将项添加到最初为空的单元格数组,该数组是结构的成员).

编辑:

推论问:所以没有办法构造一个struct包含任何空单元格数组的文字?

matlab cell-array matlab-struct

7
推荐指数
1
解决办法
3054
查看次数

访问struct data(matlab)

a= struct('a1',{1,2,3},'a2',{4,5,6})

怎么能得到1的值;

我尝试使用返回错误的a.a1 {1}

>> a.a1{1}
??? Field reference for multiple structure elements that is followed by more reference blocks is an
error.
Run Code Online (Sandbox Code Playgroud)

我如何访问1?谢谢.

编辑 A = struct{'a1',[1 2 3],'a2',[4 5 6]}

我如何访问1.我使用,A(1).a1但我得到1 2 3

matlab matlab-struct

7
推荐指数
1
解决办法
3万
查看次数

空Matlab结构S与所有元素S(:)之间的区别

我的问题是:if S和empty 之间有什么区别.S(:)S

我认为由于这个问题存在差异: 将字段添加到空结构中

最小的说明性示例:

S = struct(); %Create a struct
S(1) = []; %Make it empty
[S(:).a] = deal(0); %Works
[S.b] = deal(0); %Gives an error
Run Code Online (Sandbox Code Playgroud)

给出的错误:

当结构为空时,点名结构分配是非法的.在结构上使用下标.

matlab matlab-struct

7
推荐指数
2
解决办法
1360
查看次数

在matlab中访问多个结构字段而不循环遍历它

我有一个8x18结构,每个cel包含一个单个事件发生的列向量.我想从单个数组中连接的一些字段中获取数据,而不必循环遍历它.我似乎找不到一种方法来垂直连接我感兴趣的字段在一个数组中.

作为一个例子,我创建了以下结构,每个单元格出现1到5次:

s(62).vector(8,18).heading.occurrences=[1;2;3];
for i=1:62
    for j=1:8
        for k=1:18
            y=ceil(rand(1)*5);
            s(i).vector(j,k).heading.occurrences=rand(y,1);
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

现在,如果想要获得几个单元格中的所有实例,同时保持i常量,i=1以下工作:

ss=s(1).vector([1 26 45]);                     
h=[ss.heading];            
cell2mat({h.occurrences}')
Run Code Online (Sandbox Code Playgroud)

现在我想做同样的事情s,例如s([1 2 3]).vector([1 26 45]),它将如何工作?我试过了xx=s([1 2 3]),yy=xx.vector([1 26 45])但是这会产生错误:

期望从大括号或点索引表达式输出一个,但有3个结果.

矢量操作也可以吗?

matlab matlab-struct

6
推荐指数
1
解决办法
350
查看次数

在MATLAB中有效地对结构进行索引

直到最近,我一直将时间序列数据存储struct在MATLAB中,方法是将索引放在字段名后面,例如:

Structure.fieldA(1) = 23423
Run Code Online (Sandbox Code Playgroud)

因此,struct有一组字段,每个字段都是一个向量.

我已经看到很多其他程序使用不同的格式,其中结构本身被索引,并且结构的每个索引包含一组字段,例如:

Structure(1).fieldA
Run Code Online (Sandbox Code Playgroud)

哪种方法最有效?我应该坚持使用top选项还是应该使用bottom方法切换我的程序?

indexing matlab struct matlab-struct

5
推荐指数
1
解决办法
457
查看次数

标签 统计

matlab ×10

matlab-struct ×10

arrays ×2

struct ×2

cell-array ×1

field ×1

indexing ×1

sorting ×1

string ×1