【问题标题】:Multiple left-hand-side partial assignment in MatlabMatlab中的多个左侧部分赋值
【发布时间】:2013-08-15 22:54:45
【问题描述】:

考虑以下矩阵:

a=[1,2,3]

因此

size(a)=[1,3]

我想将第二维 3 分配给变量 n。什么是最有效的方法?

为什么以下不起作用?

[[],n]=size(a)

  n= num2cell(size(a)){2}

【问题讨论】:

标签: matlab variable-assignment matrix-indexing


【解决方案1】:

这可能是最简单的,适用于具有任意数量维度的a

n = size(a,2);

如果a 保证正好有 2 个维度,你也可以使用

[ m, n ] = size(a);

如果你不需要第一个变量,在最新版本的 Matlab 中你可以编写

[ ~, n ] = size(a);

至于你尝试过的事情:

  • [[],n]=size(a) 不起作用,因为[] 不是您可以为其赋值的变量。

  • n= num2cell(size(a)){2} 不起作用,因为您不能像在 Matlab 中那样直接索引。您需要一个临时变量:temp = num2cell(size(a)); n=temp{2}。或处理 num2cell 并执行:temp = size(a); n=temp(2)

【讨论】:

  • 第一个代码是正确的。注意其他,size 如果没有指定足够的输出变量,将返回剩余维度的乘积;例如:x = rand(5,4,3,2); [~,n] = size(x);n 将等于 4*3*2)
  • 如果您不知道维度的数量,另一种方法是:[~,n,~] = size(x) 即使ndims(x)==2 也可以。当然size(x,2) 仍然是首选方式。
  • 另外,~ 不适用于旧版本的 matlab。特别是我笔记本电脑上的 R2009a,不确定其他版本。
猜你喜欢
  • 2016-08-20
  • 2012-07-26
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2015-06-12
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多