我有一个名为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的一些帮助
由于
答案 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