A
是一个M*N*S
值矩阵,B
是P*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;
}
在每次迭代中都发生变化。那么我怎样才能提高效率呢?
答案 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不需要复制基础数据,只需改变它的访问方式。