2

我有一个相当大的向量,名为blender. 我已经提取了大于(不相关)的n元素。现在我的困难如下:blenderx

我正在尝试创建一个 ( 21 x n) 矩阵,其中搅拌机的每个元素加上之前的 10 个东西,以及之后的 10 个东西。

element=find(blender >= 120);

我一直在尝试以下变体:

for i=element(1:end)
    Matrix(i)= Matrix(blender(i-10:i+10));
end

然后我想在按 Enter 时绘制矩阵的一列。第二部分我可以稍后弄清楚,但我会感谢一些帮助制作矩阵

谢谢

4

2 回答 2

6

首先,您可以使用数组的“逻辑索引”,它使用逻辑表达式来处理您的向量。,blender = [2, 302, 35, 199, 781, 312, 8]它可能看起来像这样:

>> b_hi = blender(blender>=120)
b_hi =
       302  199  781  312

其次,您可以像 in 那样连接数组b_padded = [1, 2, b_hi, 3, 4]。如果b_hi是列向量,您将使用分号而不是逗号。

第三,有一个函数reshape允许您将结果向量转换为矩阵。doc reshape会告诉你细节。例如,要b_padded变成一个 2×4 矩阵,

>> b_matrix = reshape(b_padded, 4, 2)
b_matrix =
           1   302   781     3
           2   199   312     4

会做。这意味着您可以在没有任何 for 循环的情况下完成所有工作。请注意,转置 的结果reshape(b_padded, 2, 4)将为您提供另一个可能的 2×4 矩阵。您通过 获得矩阵的转AA'。你会发现你想要哪一个。

于 2013-01-16T19:40:28.773 回答
4

您需要创建一个新矩阵,并使用两个索引,以便 Matlab 知道它正在分配给 2D 矩阵中的列。

NewMatrix = zeros(21, length(element));
for i = 1:length(element)
    k = element(i);
    NewMatrix(:,i)= Matrix(blender(k-10:k+10));
end
于 2013-01-16T19:36:46.877 回答