【问题标题】:move rows in matlab vector to a new dimension将 matlab 向量中的行移动到新维度
【发布时间】:2012-06-23 04:45:55
【问题描述】:

我有向量

output = PV_out(:);

我试图将其分解为某种形式,例如 - output(K),其中 output(1) 是前 8760 行,输出 (2) 是接下来的 8760 行等

上面的向量是一个 236520x1 的向量,所以我试图得到 27 个“组”矩阵 有人知道怎么做吗?

谢谢

【问题讨论】:

    标签: matlab vector multidimensional-array matrix reshape


    【解决方案1】:

    这是reshape的工作:

    %# old_output is 236520x1
    %# desired is 8760 x 1 x 27 matrix 
    new_output = reshape(old_output,8760,1,[]);
    size(new_output) %# [8760 1 27]
       ans = [8760 1 27]
    

    这将创建一个 8760x1x27 矩阵,其中每一行都从给定的向量中按顺序获取。请注意,如果您给它一个 matrix 作为第一个输入参数(而不是 vector),您应该小心:您应该确保您知道值的顺序被采取。 (留空[] 意味着它将自动为该维度选择正确的大小。如果输入的numel 不能被您指定的维度整除,您仍然会遇到错误。)

    编辑:根据下面的评论更改尺寸。

    【讨论】:

    • 当然。我怎么能错过重塑 :)
    • 谢谢,现在我有了 27 行矩阵,如何将其转换为 8760x1 向量,其中每组 8760 个元素代表一个向量?
    • 我希望得到某种形式的东西,比如 new_output(K) = ... 其中 K 代表上面每个矩阵集的原始 K 值
    • 您可以将其保留为矩阵并使用new_output(K,:) 获取每一行您可以转换为单元数组:output = num2cell(new_output,2); 并使用单元格访问每一行-索引output{K}(注意大括号用于索引到元胞数组)。
    • 所以代码将读取 new_output = reshape(old_output,27,[]); new_output(K,:) %# 第一个值块?这是你的意思吗。我的问题是我需要在 linprog 不等式约束的 A 矩阵中的输出,因此必须将其作为 8760x1xK 向量供 linprog 接受!
    【解决方案2】:

    长度 = 8760;

    out = zeros(len,27);

    对于 i=1:27 out(:,i) = 输出((i-1)*len + 1 : i*len); 结束

    【讨论】:

    • 在尝试此代码时出现索引超出矩阵尺寸错误。哪里会出错? for 循环是解决这个问题的唯一方法吗?
    • 通过预分配矩阵 out = zeros(len,27) 我们不是在创建 8760 x 27 矩阵吗?
    • 是的,我们正在创建 8760x27 数组。这不是你想要的吗?我检查过。代码运行良好。
    • 另外,请确认上述行是否两次不计元素。即我正在尝试获取前 8760 个元素,然后是下一个 8760(即 8761 - 17521)等
    • +1 表示耐心和乐于助人。当人们同时具备这两点时,社区会更好。 :)
    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2016-01-24
    • 2017-03-10
    • 1970-01-01
    相关资源
    最近更新 更多