【问题标题】:Reshape of function defined matrices重塑函数定义矩阵
【发布时间】:2018-05-13 10:26:08
【问题描述】:

我在matlab中有以下代码

deltax=@(t)xt(t).'-xt(t);
deltay=@(t)yt(t).'-yt(t);
deltaz=@(t)zt(t).'-zt(t);

deltar=@(t)reshape([deltax(:) deltay(:) deltaz(:)].',3*(100+1),[]).';

其中xtytzt 都是t 定义明确的函数。如果我执行 deltax(2),我会得到一个包含 101 个条目的列数组,对于 deltay(2) 和 deltaz(2) 也是如此。

但是当我打电话时

deltar(2)

我收到此错误

Input arguments to function include colon operator. To input the colon character, use ':' instead.

我也试过了

deltar=@(t)reshape([deltax(t)(:) deltay(t)(:) deltaz(t)(:)].',3*(100+1),[]).';

但这会给我语法错误。

我一定是在做一些基本的 matlab 错误。

【问题讨论】:

  • 不是完全重复,但问题相同:fcn(:) 使用参数“:”调用fcn,这是非法的(在大多数情况下)。您需要做的类似于您的第二次尝试,但是这是非法的,因为在 MATLAB 中不允许这种双索引(但在 Octave 中是允许的)。您必须为所有三个使用reshape(deltax(t),[],1)
  • @RodyOldenhuis:该问题为第二次尝试中的错误提供了解释,并提供了潜在的解决方案(尽管不是最佳的),但并不是真正的重复。我认为这里的问题只是为数据制定了一套更好的重塑步骤。
  • @gnovice 好吧,好吧:) 相关

标签: matlab reshape


【解决方案1】:

如果 deltax(t) 返回一个您希望将其重新整形为列的矩阵,则不能使用 colon operator 执行此操作,因为有两组括号紧随其后(MATLAB 中的语法错误;更多信息可以找到here)。您必须分别在每个 delta(x|y|z) 返回值上调用 reshape

deltar = @(t) reshape([reshape(deltax(t), [], 1) ...
                       reshape(deltay(t), [], 1) ...
                       reshape(deltaz(t), [], 1)].', 3*(100+1), []).';

或者,您可以使用catpermute 实现相同的数据整形,如下所示:

deltar = @(t) reshape(permute(cat(3, deltax(t), deltay(t), deltaz(t)), [3 1 2]), ...
                      3*(100+1), []).';

如果每个delta(x|y|z) 总是返回一个 101×M 矩阵,一个更简单的解决方案是:

deltar = @(t) reshape([deltax(t).'; deltay(t).'; deltaz(t).'], [], 3*(100+1));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 2023-01-25
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多