【问题标题】:Extracting a block out of a multidimensional matrix从多维矩阵中提取块
【发布时间】:2014-12-18 20:52:44
【问题描述】:

考虑多维矩阵A,其中size(A) 具有相同的偶数元素N。应该如何找到矩阵Bsize(B)=size(A)/2,这样:

B(1,1,...,1)=A(1,1,...,1),
B(1,1,...,2)=A(1,1,...,2),
...
B(N/2,N/2,...,N/2)=A(N/2,N/2,...,N/2).

【问题讨论】:

    标签: arrays matlab matrix multidimensional-array


    【解决方案1】:

    我一般不喜欢arrayfun(或循环函数),但如果维度数不是以千计,那么这应该没问题:

    Nv = size(A)/2;
    S = arrayfun(@(x){1:x},Nv);
    B = A(S{:});
    

    也应该适用于不同尺寸的尺寸。只需决定如何处理mod(size(A),2)~=0 所在的维度。

    【讨论】:

    • 非常感谢。我认为 N 甚至如上所述。
    • 对于没有循环的解决方案,请使用S=repmat({1:size(A,1)/2},ndims(A),1)
    • 刚刚意识到没有数千个维度。最多有 47 个(或者在最近的版本中可能有 64 个)非单一维度。超出的任何内容都无法编入索引,并且需要大于 uint64 的索引。在这里优化是完全没有必要的,迭代这么少的值 arrayfun 完全没问题。
    • @Daniel 我想是这样的。感谢您的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多