【问题标题】:Store rows of a matrix in variables - MATLAB将矩阵的行存储在变量中 - MATLAB
【发布时间】:2023-04-05 20:37:02
【问题描述】:

我需要将矩阵的每一行存储在向量中。如果矩阵是这样的:

 mtx = 0     3     4     
       3     0     1     
       4     1     0

向量将是:

vec1 = 0 3 4
vec2 = 3 0 1
vec3 = 4 1 0

我该怎么做?请注意,我不知道会有多少向量(在编写代码时)。

【问题讨论】:

  • 你也可以查看这个:rows = arrayfun(@(i)mtx(i,:),1:size(mtx,1),'uni',0) :)
  • 您可能不需要需要这样做,也可能不想想要因为处理这些变量会很麻烦。你最好使用元胞数组。或者更好,只需使用mtx(1,:) 代替vec1mtx(2,:) 代替vec2

标签: arrays string matlab variables matrix


【解决方案1】:
vec1 = mtx(1,:)
vec2 = mtx(2,:)
vec3 = mtx(3,:)

如果你有更多的向量(运行时之前的未知数),可以使用元胞数组

[m, n] = size(mtx);
for i = 1:m
    vec{i} = mtx(i, :);
end;

现在vec{i} 包含i-th 行向量。你真的应该考虑一下这是否是你真正想要的,因为你可以简单地使用mtx(i,:)

【讨论】:

  • vec{i} = mtx(i, :) 的问题是它存储在同一个变量中,我需要它在不同的变量中
  • @EveSmith 所以你想为每个变量使用不同的名称?如果是,我建议考虑改变设计,或者有一个很好的动机,因为我认为没有理由这样做。
  • 你是对的!我很复杂。我现在已经改变了。谢谢
【解决方案2】:

如果不使用eval,您将无法动态创建变量。最好的方法是创建结构的 dynamically 字段,如下所示:

s = struct();

for rowi = 1:size(mtx, 1)
    s.(sprintf('var%d', rowi)) = mtx(rowi,:)
end

这给出了:

s = 

    var1: [0 3 4]
    var2: [3 0 1]
    var3: [4 1 0]

【讨论】:

    【解决方案3】:

    这是“不推荐”的答案(这就是为什么没有人发布它)!

    mxt = [ 0     3     4;     
            3     0     1;     
            4     1     0];
    for i = 1 : size(mxt,1)
       eval(['vec',num2str(i),' = mxt(',num2str(i),',:);']) 
    end
    

    给你,

    vec1 = [0     3     4];
    vec2 = [3     0     1];
    vec3 = [4     1     0];
    

    【讨论】:

    • 如果我想通过这些向量,我应该怎么做?如果我使用 size (mtx, 1) 我可以知道会有多少向量,但我如何访问它们?
    • @EveSmith,再次使用eval 在循环中访问它们。请参阅eval 的帮助。
    • 我把代码改了一点,我觉得现在好多了。谢谢
    猜你喜欢
    • 2022-10-14
    • 2015-12-28
    • 2021-08-28
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多