【问题标题】:How to create a new matrix with a for loop in MATLAB?如何在 MATLAB 中使用 for 循环创建新矩阵?
【发布时间】:2021-09-15 13:23:49
【问题描述】:

我是新手。我有问题。 我有 20 (1x100) 个不同的命名向量。我想结合这些向量来创建一个带有 for 循环的 20x100 矩阵。 有向量的例子。

namelist=["First","B","New"]
First = [1:100]
B = [1:2:200]
New = [4:4:400]
for i = 1: length(namelist)
    new_database(i,1:end) = namelist{i}
end

但是,当我想尝试这个时,我看到“必须在数组索引表达式中使用结束运算符。”错误。 我知道我可以用这个做同样的事情: "new_database= [First;B;New]"

但我想用 for 循环来做到这一点。 你能帮我解决这个错误吗?或者你能解释一下如何做到这一点?

【问题讨论】:

  • 鉴于此设置,您需要做的更像是new_database(i,:) = eval([namelist{i}, ';']);。您应该做的是避免动态变量命名,而不是将自己置于首先需要这样做的位置!请看MathWorks: Evading Eval
  • @Wolfie 谢谢你的回答!另外,我看到了这个帖子mathworks.com/matlabcentral/answers/…

标签: matlab for-loop matrix


【解决方案1】:

你的问题在于这一行:

new_database(i,1:end) = namelist{i}

花括号仅用于单元格,无需像您那样使用范围索引(i,1:end)

通常,最好将字符数组或字符串分配给单元格。

一个问题,你对“First”、“New”和“B”范围数组做了什么?

类似:

namelist=["First","B","New"]

First = [1:100];
B = [1:2:200];
New = [4:4:400];

new_database = cell(1, length(namelist));

for i = 1: length(namelist)   % or length(new_database)
    new_database{i} = namelist(i)
end

生成此输出:

编辑:我很抱歉,现在我看到了你想要完成的事情。您正在从一系列数组构建数据库,对吗?

根据我之前的回复,您必须考虑以下几点:

1 你的 new_database 应该是方形的。不管你传递给它的数组的维度是什么,如果你从它们组成一个单元格,如果没有数据传递给这些行或列,你总是会有空单元格

2 在某些情况下,您不需要使用 for 循环,其中简单的索引可能足以解决您的案例问题。考虑以下使用cellstr 的示例:

titles = ["Position", "Fruits", "Mythical creatures"] 
A = ["One", "Two", "Three"];
B = ["Apple", "Banana", "Durian"];
C = ["Dragon", "Cat", "Hamster"];

db = cell(4, 3);

db(1,:) = cellstr(titles)
db(2:end,1) = cellstr(A)
db(2:end,2) = cellstr(B)
db(2:end,3) = cellstr(C)

生成此输出:

【讨论】:

  • 丹尼尔,你是对的!我试图从我拥有的数据中创建一个数据库。感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多