我有一个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阵列。谢谢。
答案 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)