在多维数组Matlab中选择所有BUT某些索引对

时间:2016-03-31 18:20:18

标签: matlab matrix matrix-indexing

我试图在多维数组中选择所有BUT某些索引对。即我有一组配对指数(例如[1,2]和[4,5])。我想将所有索引对设置为0。

我最接近的是:

A(setdiff(1:length(A(:,1)),lon),setdiff(1:length(A(1,:)),lat)) = 0;

,其中A是矩阵,lon和lat是我想要保留的索引对。但是,这也会留下这些对的所有相交的行和列。

有什么想法吗?

以下是一些示例代码:

A = ones([5,5])
A =

     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1

lon = [1];

lat = [4];

A(setdiff(1:length(A(:,1)),lon),setdiff(1:length(A(1,:)),lat)) = 0

A =

     1     1     1     1     1
     0     0     0     1     0
     0     0     0     1     0
     0     0     0     1     0
     0     0     0     1     0

我想要的是:

A =

     0     0     0     1     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0

1 个答案:

答案 0 :(得分:0)

最简单的事情实际上与你所尝试的相反。首先,您要从零矩阵开始,然后只填写您在latlon中存储的对。另外,由于您已配对下标,因此您需要使用sub2ind

将这些下标转换为线性索引
%// Convert subscripts to a linear index
inds = sub2ind(size(A), lon, lat);

%// Start off with a matrix of zeros
B = zeros(size(A));

%// Fill in the values at the specified lat/lon from A
B(inds) = A(inds);