【问题标题】:Shift data in a matrix在矩阵中移动数据
【发布时间】:2021-03-10 15:12:51
【问题描述】:

我想在 n x 12 维度的矩阵中重新排列数据,其中 n 是年,12 是月。

我的目标是生成一个新矩阵。

旧矩阵:

4   11  5   4   5   6   7   Nan 9   10  11  7 
13  14  15  5   17  4   19  20  21  22  23  24

新矩阵,版本 1:

Nan Nan 4   11   5   4   5   6   7   Nan 9   10  
11  7   13  14   15  5   17  4   19  20  21  22

新矩阵,版本 2:

4   5   6   7   Nan 9   10  11  7   13  14  15
5   17  4   19  20  21  22  Nan Nan Nan Nan Nan

我希望有时间向前和向后移动的选项。

非常感谢您的帮助。 提前致谢。

【问题讨论】:

  • 您尝试了哪些方法?你的尝试哪里出错了?
  • 我想使用 lagmatrix 功能,但它需要安装一个不是免费的工具箱。然后我找到了 circshift 和 timeshift,但我不知道如何正确地应用它来达到我的目的。
  • 可以使用circshift,但您必须将二维数组转换为一维向量、移位,然后将 NaN 放在适当的位置。不过,您可以使用数组索引来完成同样的事情。当然,最后您必须将数据重新整形为二维数组。但如果我要进行大量转换,我可能只是将数据存储为列向量,并仅在必要时对其进行整形。这有帮助吗?

标签: matlab matrix lag shift


【解决方案1】:

我了解您提出的解决方案,但仍有问题。我向你展示我的尝试,这只是三个月的时间延迟,这是我的“测试”延迟。

ind=Stmp.data(:,2:end);
inv_ind=ind';  
ind_vec=inv_ind(:); 
shift_month = 3;  
if shift_month == 3;  
test=[nan; nan; nan; ind_vec];  
TEST=reshape(test, 12, [])  
end

将向量重新整形为矩阵时脚本失败。你能帮我解决这个问题吗? 很抱歉将此作为答案发布,但我无法在评论中正确发布代码。

【讨论】:

  • 您不应将此作为答案发布,而应使用新信息编辑您的原始问题。要回答您的直接问题,您将获取一个长度可被 12 整除的向量,向其中添加 3 个元素,然后尝试再次将元素分成 12 个组,但这是行不通的。试试test = [nan; nan; nan; ind_vec(1:end-3)]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
相关资源
最近更新 更多