Arrays 如何从数组中提取一些元素,并在matlab中生成剩余的NaN?
我有一个13x14双精度阵列。我想提取几个元素,这些元素不是以任何特定的顺序排列的,并使其余的元素为NaN 例如,如果Arrays 如何从数组中提取一些元素,并在matlab中生成剩余的NaN?,arrays,matlab,element,extract,nan,Arrays,Matlab,Element,Extract,Nan,我有一个13x14双精度阵列。我想提取几个元素,这些元素不是以任何特定的顺序排列的,并使其余的元素为NaN 例如,如果 A = [ 0.2 0.3 0.6 0.4 0.1 0.5 0.2 0.8 0.7 0.1 0.5 0.9 0.2 0.5 0.6 0.7] 我想提取索引为(2,1)、(2,3)(3,3)和(4,2)的元素,并将其余元素作为NaN。因此,最终输出应为: [ NaN NaN NaN NAN 0.1 NaN 0.2 NaN NaN NaN
A = [ 0.2 0.3 0.6 0.4
0.1 0.5 0.2 0.8
0.7 0.1 0.5 0.9
0.2 0.5 0.6 0.7]
我想提取索引为(2,1)、(2,3)(3,3)和(4,2)的元素,并将其余元素作为NaN。因此,最终输出应为:
[ NaN NaN NaN NAN
0.1 NaN 0.2 NaN
NaN NaN 0.5 NaN
NaN 0.5 NaN NaN ]
我尝试了逻辑索引,但它给了我一个我不想要的向量,因为这样你就不能重塑它,使它成为二维数组。我想要一个二维阵列。谢谢 首先预先分配:
result = NaN(size(A))
result(2,1) = A(2,1)
result(2,3) = A(2,3)
或者,如果您将下标作为n×2矩阵,则可以使用sub2ind
一次性完成:
result = NaN(size(A))
subs = [2,1
2,3
3,3
4,2];
ind = sub2ubd(size(A), subs(:,1), subs(:,2));
result(ind) = A(ind)
您可以通过创建一个与完整的NAN大小相同的矩阵,然后使用线性索引以所需的值覆盖NAN来实现这一点:
A = [ 0.2 0.3 0.6 0.4
0.1 0.5 0.2 0.8
0.7 0.1 0.5 0.9
0.2 0.5 0.6 0.7 ]
%(2,1), (2,3) (3,3) and (4,2) % // reads as...
rows = [2, 2, 3, 4];
cols = [1, 3, 3, 2];
idx = sub2ind(size(A), rows, cols) % // pair of indices as linear indices
out = NaN(size(A)); % // Matrix full of NaN (same size as A)
out(idx) = A(idx); % // Overwriting with values from A at given indices