Matlab“for loop”创建矩阵

时间:2013-01-16 19:30:11

标签: matlab loops for-loop matrix

我有一个名为blender的相当大的矢量。我提取了n大于blender(不相关)的x个元素。现在我的困难如下:

我正在尝试创建一个(21 x n)矩阵,其中包含blender的每个元素以及之前的10个内容,以及之后的10个内容。

element=find(blender >= 120);

我一直在尝试以下各种变体:

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

然后我想在输入Enter时绘制矩阵的一列。 我可以在后面弄清楚这第二部分,但我很感激制作Matrix的一些帮助

由于

2 个答案:

答案 0 :(得分:6)

首先,您可以使用数组的“逻辑索引”,它使用逻辑表达式对您的向量进行寻址。使用blender = [2, 302, 35, 199, 781, 312, 8],它可能如下所示:

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

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

第三,有一个函数reshape允许您将结果向量转换为矩阵。 doc reshape会告诉您详细信息。例如,要将b_padded转换为2 x 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 x 4矩阵。您可以通过A获得矩阵A'的转置。你会发现你想要哪一个。

答案 1 :(得分: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