我有一个矩阵,它有1列,每列有5448行,每行都有值。实际上,这5448个值被分成12个抽头(每个抽头454个值)。我想索引最接近点击边界的10%的值(点击10%的值是45.4值,所以假设是45个值)。对于第一次点击,我只需要最后10%,对于最后一次点击(点击12),我只需要前10%。每隔一个点击(2-11)我需要开始的10%和最后的10%。所以基本上每个抽头的前45个值和后45个值。
目前我提取的值段如下所示:
A1 = interpolate((817/2+.5):(908/2),:);
B1 = interpolate((909/2+.5):(1000/2),:);这个例子包括tap 1的最后10%的值和tap 2的前10%的值。如果我只有几个片段来提取,这是可以的,但是当我的矩阵上升到大约40,000个值时,这个方法就会变得有点重复。
发布于 2012-08-02 06:20:01
我会做一个函数来获取这些值,以避免犯愚蠢的错误(并且在更改点击大小或百分比时使其更容易):
function [A, B] = GetTapBoundaries( arr, tapNum, tapSize )
sliceSize = floor(tapSize * 0.1);
boundaryIdx = (tapNum-1) * tapSize; % last element in previous tap
leftIdx = boundaryIdx - sliceSize + 1;
rightIdx = boundaryIdx + sliceSize;
if leftIdx >= 1 && boundaryIdx <= size(arr,1)
A = arr( leftIdx:boundaryIdx, : );
else
A = [];
end
if boundaryIdx >= 0 && rightIdx <= size(arr, 1)
B = arr( boundaryIdx+1:rightIdx, : );
else
B = [];
end
end现在像这样调用:
tapSize = 454;
[A1, B1] = GetTapBoundaries( interpolated, 1, tapSize );
[A2, B2] = GetTapBoundaries( interpolated, 2, tapSize );
% etc ...
[A12, B12] = GetTapBoundaries( interpolated, 12, tapSize );或者你可以使用单元数组:
tapSize = 454;
numTaps = floor( size(interpolated,1) / tapSize );
A = cell(numTaps,1);
B = cell(numTaps,1);
for tap = 1:numTaps
[Ax, Bx] = GetTapBoundaries( interpolated, tap, tapSize );
A(tap) = Ax;
B(tap) = Bx;
end为任何语法或逻辑错误道歉...我只是把这段代码塞进我的浏览器,而没有在MATLAB中检查它。
https://stackoverflow.com/questions/11768210
复制相似问题