我有以下问题:
我有一个给定的矩阵,比方说4x4。如何获得下列组合的索引:
例如,如果我有矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16另外,是否有可能将这些操作结合起来,例如,我得到了“行奇数和列奇数”和“行偶数和列偶数”的索引?
谢谢!
发布于 2014-10-27 14:53:03
用索引很容易做到:
奇数行和奇数列
B = A(1:2:end, 1:2:end);奇行偶数列
B = A(1:2:end, 2:2:end);偶数行和奇数列
B = A(2:2:end, 1:2:end);偶行偶列
B = A(2:2:end, 2:2:end);以上假设您想要实际的矩阵值本身。这有点让人困惑,因为矩阵元素与线性索引值本身是一样的。如果您想要确定访问矩阵的实际列主要索引,可以从1 to N生成一个向量,其中N是矩阵中元素的总数,然后将该矩阵重塑为所需的大小。之后,使用上述相同的逻辑来获得实际的线性索引:
N = numel(A);
B = reshape(1:N, size(A,1), size(A,2));
ind = B(1:2:end, 1:2:end); %// For odd rows, odd columns
%// Repeat for the other ones...现在,考虑到您的注释,您希望创建一个新的矩阵,它只存储这些提取的矩阵值,同时使所有其他元素为零。如果要这样做,只需预先分配一个零矩阵,然后复制这些值,使用计算出来的索引提取到新的矩阵中。换言之:
N = numel(A);
B = reshape(1:N, size(A,1), size(A,2));
ind = B(1:2:end, 1:2:end); %// For odd rows, odd columns - Change to suit your tastes
out = zeros(size(A));
out(ind(:)) = A(ind(:));如果要组合索引,例如有奇数行-奇数列和偶数行-偶数列,只需计算两组索引,将它们连接到一个向量中,并执行与以前相同的语法。因此:
N = numel(A);
B = reshape(1:N, size(A,1), size(A,2));
ind = B(1:2:end, 1:2:end); %// For odd rows, odd columns
ind2 = B(2:2:end, 2:2:end); %// For even rows, even columns
ind = [ind(:); ind2(:)];
out = zeros(size(A));
out(ind) = A(ind);发布于 2014-10-27 14:51:45
码
N = size(A,1); %// Get size of input matrix A
case1_ind = bsxfun(@plus,[1:2:N]',(0:N/2-1)*2*N)
case2_ind = case1_ind + N
case3_ind = case1_ind + 1
case4_ind = case3_ind + N注:这些产出是指数。因此,要得到实际的输出,使用这些作为索引。
要组合case 1和case 4的索引,只需连接-
case14comb_ind = [case1_ind ; case4_ind]编辑:
%// To copy onto some other matrix of the same size as A, do this for case 1
new_matrix = zeros(size(A))
new_matrix(case1_ind(:)) = A(case1_ind(:))在其他情况下也要重复这个。
https://stackoverflow.com/questions/26590093
复制相似问题