【发布时间】:2016-04-07 09:56:40
【问题描述】:
考虑一维数组:y(1:20) 和矩阵形式的索引集合:indx = [1,3;7,12;16,19]
有没有一种简洁的方法来获取单元格数组:{y(1:3), y(7:12), y(16:19)} ?
使用循环很容易完成,但我很想知道将索引集合传递给一维数组的简单且更简洁的方法。
【问题讨论】:
考虑一维数组:y(1:20) 和矩阵形式的索引集合:indx = [1,3;7,12;16,19]
有没有一种简洁的方法来获取单元格数组:{y(1:3), y(7:12), y(16:19)} ?
使用循环很容易完成,但我很想知道将索引集合传递给一维数组的简单且更简洁的方法。
【问题讨论】:
我认为没有办法使用循环。不过,您可以使用 arrayfun 作为速记:
arrayfun(@(from,to) y(from:to), indx(:,1), indx(:,2), 'uni', 0)
在你的数据上运行这个结果
y = (1:20)*10;
indx = [1,3;7,12;16,19];
celldisp(arrayfun(@(from,to) y(from:to), indx(:,1), indx(:,2), 'uni', 0))
ans{1} =
10 20 30
ans{2} =
70 80 90 100 110 120
ans{3} =
160 170 180 190
【讨论】:
arrayfun(@(from,to) y(from:to), indx(:,1), indx(:,2), 'uni', 0)
arrayfun 只是在后台执行一个循环。