arrays - 在 MATLAB 中从数组中选择元素

标签 arrays matlab indexing

我知道在 MATLAB 中,在 1D 情况下,您可以选择具有索引的元素,例如 a([1 5 3]),以返回 a 的第 1、5 和 3 个元素.我有一个二维数组,想根据我拥有的一组元组来选择单个元素。所以我可能想要获取a(1,3)、a(1,4)、a(2,5)等等。目前我拥有的最好的是 diag(a(tuples(:,1), tuples(:,2)),但是对于较大的 a 和/或元组,这需要大量的内存。我必须将这些元组转换为线性索引,还是有一种更简洁的方法可以在不占用太多内存的情况下完成我想要的?

最佳答案

转换为线性索引似乎是一种合法的方式:

indices = tuples(:, 1) + size(a,1)*(tuples(:,2)-1);
selection = a(indices);

请注意,这也在 Matlab 内置解决方案 sub2ind 中实现,如 nate'2 中的答案:

a(sub2ind(size(a), tuples(:,1),tuples(:,2)))

但是,

a = rand(50);
tuples = [1,1; 1,4; 2,5];

start = tic;
for ii = 1:1e4
    indices = tuples(:,1) + size(a,1)*(tuples(:,2)-1); end
time1 = toc(start);


start = tic;
for ii = 1:1e4
    sub2ind(size(a),tuples(:,1),tuples(:,2)); end
time2 = toc(start);

round(time2/time1)

给出

ans =   
    38

因此,虽然 sub2ind 在视觉上更轻松,但它也 慢了 ~40 倍。如果您必须经常进行此操作,请选择上述方法。否则,使用 sub2ind 来提高可读性。

关于arrays - 在 MATLAB 中从数组中选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023997/

相关文章:

ios - 在for循环后按值对字典数组进行排序?

c - 排序整数数组 C

matlab - 如何在matlab中找到排序数组的中点?

r - 如何用值向量填充索引矩阵

javascript - 将对象数组转换为包含对象数组的对象(复杂)

javascript - 奇怪的 Javascript 警报输出

python - 在 n 维数组上使用 scipy interpn 和 meshgrid

matlab - 获取 MATLAB 图的属性名称和值列表

MongoDB - 将 $ne 和 $in 与复合多键索引一起使用时不使用索引

mongodb - 如何在 mongo 中指定多个字段的唯一性,而不是组合?