首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将矩阵索引为多个片段

如何将矩阵索引为多个片段
EN

Stack Overflow用户
提问于 2012-08-02 05:58:55
回答 1查看 2.3K关注 0票数 0

我有一个矩阵,它有1列,每列有5448行,每行都有值。实际上,这5448个值被分成12个抽头(每个抽头454个值)。我想索引最接近点击边界的10%的值(点击10%的值是45.4值,所以假设是45个值)。对于第一次点击,我只需要最后10%,对于最后一次点击(点击12),我只需要前10%。每隔一个点击(2-11)我需要开始的10%和最后的10%。所以基本上每个抽头的前45个值和后45个值。

目前我提取的值段如下所示:

代码语言:javascript
运行
复制
A1 = interpolate((817/2+.5):(908/2),:);
B1 = interpolate((909/2+.5):(1000/2),:);

这个例子包括tap 1的最后10%的值和tap 2的前10%的值。如果我只有几个片段来提取,这是可以的,但是当我的矩阵上升到大约40,000个值时,这个方法就会变得有点重复。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 06:20:01

我会做一个函数来获取这些值,以避免犯愚蠢的错误(并且在更改点击大小或百分比时使其更容易):

代码语言:javascript
运行
复制
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

现在像这样调用:

代码语言:javascript
运行
复制
tapSize = 454;
[A1, B1] = GetTapBoundaries( interpolated, 1, tapSize );
[A2, B2] = GetTapBoundaries( interpolated, 2, tapSize );
% etc ...
[A12, B12] = GetTapBoundaries( interpolated, 12, tapSize );

或者你可以使用单元数组:

代码语言:javascript
运行
复制
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中检查它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11768210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档