如何有效地在矩阵中的指定位置沿第3个方向获取所有元素?

时间:2016-06-27 12:28:09

标签: matlab matrix indexing vectorization

A是一个M*N*S值矩阵,BP*1矩阵中位置索引的M*N向量。我希望获得P*S矩阵C,即A指定的位置B上的所有值A(:, :, 1)%% sample inputs M = 2; N = 3; S = 3; A = reshape(1:M*N*S, M, N, S) B = (1:3:M*N)' P = numel(B); %% solution B2 = repmat(B, 1, S)+repmat((0:S-1)*M*N, P, 1); C = A(B2) ) 。 这是我目前的代码:

repmat

但它调用了P两次,我需要在for循环中-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if(range.length + range.location > textView.text.length) { return NO; } NSUInteger newLength = [textView.text length] + [text length] - range.length; return newLength <= 500; } 在每次迭代中都发生变化。那么我怎样才能提高效率呢?

1 个答案:

答案 0 :(得分:1)

首先,我强烈反对使用O作为变量名称。它看起来像零。同样,请避免使用小写l,因为它看起来像1。下面我将使用S代替您的O

您可以将reshape初始矩阵简单地[M*N, S]转换为% Collapse the first two dimensions into rows data = reshape(A, [], size(A, 3)); % Grab the rows that correspond to the indices in B C = data(B, :); 矩阵,然后在第一列上使用索引。

reshape

使用.obj非常有效,因为MATLAB不需要复制基础数据,只需改变它的访问方式。