【问题标题】:matlab array subsetting by indicesmatlab数组子集按索引
【发布时间】:2013-03-15 23:16:45
【问题描述】:

假设我有一个 3x3x3 Matlab 数组,成员为 1 到 27

a=reshape(1:27, [3 3 3])

我想用类似

的语法创建它的一个子集

b=a(range1,range2,range3)

对于 range1=range2=range3=1:2,我会得到成员 b(1,1,1)b(2,2,2)。即

b= [1 14]

是否可以仅使用索引而不使用任何功能(例如诊断)来做到这一点?谢谢...

【问题讨论】:

  • @Parag,sub2ind 需要相同大小的向量范围。例如b=a(sub2ind(size(a),range1,range2,1:3))。这就是为什么我正在寻找只用索引来做......
  • @Molly 请看我对上面 Parag 的评论...
  • range1、range2 和 range3 的大小必须相同,因为每个都对应于矩阵 a 的一个维度。例如,如果 range1 = [x1,x2,x3], range2 = [y1,y2,y3] 和 range3 = [z1,z2,z3] 获得的值将是 a(x1,y1,z1), a(x2 ,y2,z2) 和 a(x3,y3,z3)。所以这个函数采用不同大小的向量是没有意义的。在您评论中的示例中,期望答案是什么?

标签: matlab indexing subset


【解决方案1】:

可以通过sub2ind函数完成,如下:

b=a(sub2ind(size(a),range1,range2,range3))

ans: b=[1 14]

【讨论】:

  • sub2ind 要求范围相同大小的向量。例如b=a(sub2ind(size(a),range1,range2,1:3))。这就是为什么我正在寻找只使用索引...
  • 如果它们的大小相同,比如 1:2、1:2、1:3,那么你将如何决定下标。因为当它们的大小为 1:2 时,下标将是 (1,1,1) 和 (2,2,2)
【解决方案2】:

可以使用sub2ind进行索引,

a(sub2ind(size(a),[1:2],[1:2],[1:2]))

如果你想避免所有函数,你可以自己计算线性指数...

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多