说A是3x4x5的数组。给我一个向量a,例如维度2和维度2的b。如果我做A(a,b,:),它将给出5个维度为2x2的矩阵。相反,我需要分段向量(不编写for循环)。
所以,我想要A的两个向量分别由(a的第一个元素和b的第一个元素)和(a的第二个元素和b的第二个元素)给出
如何在没有for循环的情况下执行此操作?如果A是二维的,我可以使用sub2ind做到这一点。我不知道如何访问整个向量。
答案 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);
});
}