如何从数组中提取一些元素并在matlab中休息NaN?

时间:2014-10-27 09:52:05

标签: 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 0.5 NaN 
 NaN 0.5 NaN NaN ] 

我尝试了逻辑索引,但它给了我一个我不想要的向量,因为那时你不能重塑它并使它成为二维数组。我想要一个2-D阵列。谢谢。

2 个答案:

答案 0 :(得分:2)

你可以通过创建一个相同大小的A满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

答案 1 :(得分:0)

首先预先分配:

result = NaN(size(A))
result(2,1) = A(2,1)
result(2,3) = A(2,3)

或者如果您将下标作为 n -by- 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)