gpt4 book ai didi

matlab - matlab中的矩阵 block 索引加掩码

转载 作者:行者123 更新时间:2023-12-02 03:37:50 26 4
gpt4 key购买 nike

我想使用逻辑掩码索引矩阵的一部分。因此,作为输入,我有一个矩阵 A,其中有一些 nan 值,我使用 isnan 为此创建了一个 mask。此外,我有一个值向量 v,我想将其插入到 A A(mask)=v 中。然后我使用 A B=[A;A;A] 构造另一个矩阵 B。现在我想将 v 中的值应用到 B 中的正确位置。如何在不创建 temp=B(1:size(A,1),1:size(A,2)) 矩阵或创建新的 mask=[ 的情况下在 Matlab 中执行此操作mask;false(2*size(A,1),size(A,2))]?

再来一次:

A = rand(2,10);
v = A(A>0.5);
A(A>0.5) = nan;
mask = isnan(A);
B=[A;A;A];

% now how to write v to B?
% not doing one of those:

tmp = B(1:2,:);
tmp(mask) = v;
B(1:2,:) = tmp;

%...

mask1 = [mask;false(4,10)]

mask2 = [false(2,10);mask;false(2,10)]

mask3 = [false(4,10);mask]

B(mask1) = v;
B(mask2) = v;
B(mask3) = v;

% what i miss is something like B(1:2,:)(mask)

最佳答案

我假设您想要在 B 中出现的三个 A 中的每一个处填充值。

如果你不介意重复向量v:

B = repmat(A.',1,3); % easier to work by columns
B(bsxfun(@plus,find(mask.'),(0:2)*numel(A))) = v(repmat(1:numel(v),1,3)); % fill
B = B.'; % transpose back

关于matlab - matlab中的矩阵 block 索引加掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com