相关疑难解决方法(0)

1x1矩阵的第一个元素与1x1矩阵的所有元素之间的差异

在找到处理空结构的逻辑之后,我想检查这是如何推广到矩阵的.

在这里我注意到以下内容:

如果您有1x1矩阵,并分配给第一个元素.它与分配给所有元素不同.

这让我感到很惊讶,因为第一个元素与本案例中的所有元素完全相同.以下是我的观察:

x = 1;
y = 1;
z = 1;

x(:) = []; % Evaluates to [] as I expected
y(1) = []; % Evaluates to Empty matrix: 1-by-0, rather than []
z(1,1) = []; %Throws an error: 'Subscripted assignment dimension mismatch.' even though size(z)  gives [1 1];
z(1,:) = []; % Evaluates to Empty matrix: 0-by-1, just like z(:,:) = []
Run Code Online (Sandbox Code Playgroud)

看到这个之后,我的问题是:

为什么以不同的方式分配同一个东西,导致四种不同的结果?

matlab matrix

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

将字段添加到空结构

假设我有一个S大小为0x1 的结构,且带有字段ab,向其添加字段的最优雅的方法c是什么?

通常,我能够这样做:

S = struct('a',0,'b',0); %1x1 struct with fields a,b
S.c = 0
Run Code Online (Sandbox Code Playgroud)

但是,如果我收到一个空的结构,它将不再起作用:

S = struct('a',0,'b',0);
S(1) = []; % 0x1 struct with fields a,b
S.c = 0;
% A dot name structure assignment is illegal when the structure is empty.  
% Use a subscript on the structure.
Run Code Online (Sandbox Code Playgroud)

我已经想到了两种方法来解决此问题,但是这两种方法都很难看,感觉像是解决方法,而不是解决方案。(请注意,也应正确处理非空结构的可能性)。

  1. 向结构中添加一些内容以确保其不为空,添加字段,然后再次使结构为空
  2. 使用所需的字段名初始化新结构,将原始结构中的数据填充其中,然后覆盖原始结构

我意识到,我关心空结构可能很奇怪,但是不幸的是,如果字段名不存在,则由我管理的部分代码将崩溃。我已经查看了help structhelp subsasgn并且还搜索了给定的错误消息,但是到目前为止,我还没有发现任何提示。因此,非常感谢您的帮助!

matlab struct variable-assignment

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

matlab ×2

matrix ×1

struct ×1

variable-assignment ×1