具有二维的Sub2ind-访问所有维度

时间:2019-08-22 20:18:10

标签: arrays matlab

说A是3x4x5的数组。给我一个向量a,例如维度2和维度2的b。如果我做A(a,b,:),它将给出5个维度为2x2的矩阵。相反,我需要分段向量(不编写for循环)。

所以,我想要A的两个向量分别由(a的第一个元素和b的第一个元素)和(a的第二个元素和b的第二个元素)给出

如何在没有for循环的情况下执行此操作?如果A是二维的,我可以使用sub2ind做到这一点。我不知道如何访问整个向量。

2 个答案:

答案 0 :(得分:2)

您可以使用sub2ind找到每个输出矢量的第一个元素的线性索引:ind = sub2ind(size(A),a,b)。要获得整个矢量,您不能做A(ind,:),因为:必须是三维。但是,您可以做的是将A整形为2D,将前两个维折叠为一个。我们有一个指向所需矢量的线性索引,该索引将正确索引此经过整形的A的第一维:

% input:
A = rand(3,4,5);
a = [2,3];
b = [1,2];

% expected:
B = [squeeze(A(a(1),b(1),:)).';squeeze(A(a(2),b(2),:)).']

% solution:
ind = sub2ind(size(A),a,b);
C = reshape(A,[],size(A,3));
C = C(ind,:)

assert(isequal(B,C))

答案 1 :(得分:1)

您可以像将A和b一样将其更改为3d数组,然后sub2ind应该能够索引整个矩阵。像这样:

编辑:有人指出了一个错误。我已更改它,以便添加更正。问题是应该为A的每个所需元素指定索引号的ind1仅索引A的第一个“平面”。解决方法是,对于z方向上的每个其他“平面”,元素总数必须将先前“飞机”中A中的A添加到索引中。

app.get('/crawler/', async function(req, res){

    var returnedTitle =  await crawlerTest(req.query.urlsite);
    res.send({'title' : returnedtitle});
    res.end();

    });

    function crawlerTest(urlsite){
        return new Promise((resolve,reject)=>{
            var c = new Crawler({
                maxConnections : 10,
                // This will be called for each crawled page
                callback : function (error, res, done) {
                    if(error){
                        console.log(error);
                        reject(error);
                    }else{
                        var $ = res.$;
                        // $ is Cheerio by default
                        //a lean implementation of core jQuery designed specifically for the server
                        console.log($("title").text());
                        resolve($("title").text());
                    }
                    done();
                }
            });

            // Queue just one URL, with default callback
            c.queue(urlsite);
        });

    }
相关问题