Select 多维数组Matlab中的所有但某些索引对
Select all BUT certain index pairs in multi-dimensional array Matlab
我正在尝试 select 多维数组中的所有但某些索引对。即我有一组配对索引(例如 [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
我想要的是:
一个=
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
最简单的做法实际上与您尝试过的相反。首先,您想从一个零矩阵开始,然后只填充您存储在 lat
和 lon
中的那些对。此外,因为您有成对的下标,所以您需要使用 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);
我正在尝试 select 多维数组中的所有但某些索引对。即我有一组配对索引(例如 [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
我想要的是:
一个=
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
最简单的做法实际上与您尝试过的相反。首先,您想从一个零矩阵开始,然后只填充您存储在 lat
和 lon
中的那些对。此外,因为您有成对的下标,所以您需要使用 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);