首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >得到矩阵- MATLAB的奇偶指数

得到矩阵- MATLAB的奇偶指数
EN

Stack Overflow用户
提问于 2014-10-27 14:42:24
回答 2查看 26.8K关注 0票数 3

我有以下问题:

我有一个给定的矩阵,比方说4x4。如何获得下列组合的索引:

  • 行奇和列奇
  • 行奇偶和列偶
  • 行偶数列奇数
  • 行偶数和列偶

例如,如果我有矩阵:

代码语言:javascript
复制
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
  • “行奇”和“列奇”是1,3,9,11的指数。
  • “行奇偶和列偶数”是2,4,10,12的指数.
  • “行偶数和列奇”是5,7,13,15的指数.
  • “行偶数和列偶数”是6,8,14,16的指数.

另外,是否有可能将这些操作结合起来,例如,我得到了“行奇数和列奇数”和“行偶数和列偶数”的索引?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-27 14:53:03

用索引很容易做到:

奇数行和奇数列

代码语言:javascript
复制
B = A(1:2:end, 1:2:end);

奇行偶数列

代码语言:javascript
复制
B = A(1:2:end, 2:2:end);

偶数行和奇数列

代码语言:javascript
复制
B = A(2:2:end, 1:2:end);

偶行偶列

代码语言:javascript
复制
B = A(2:2:end, 2:2:end);

以上假设您想要实际的矩阵值本身。这有点让人困惑,因为矩阵元素与线性索引值本身是一样的。如果您想要确定访问矩阵的实际列主要索引,可以从1 to N生成一个向量,其中N是矩阵中元素的总数,然后将该矩阵重塑为所需的大小。之后,使用上述相同的逻辑来获得实际的线性索引:

代码语言:javascript
复制
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...

现在,考虑到您的注释,您希望创建一个新的矩阵,它只存储这些提取的矩阵值,同时使所有其他元素为零。如果要这样做,只需预先分配一个零矩阵,然后复制这些值,使用计算出来的索引提取到新的矩阵中。换言之:

代码语言:javascript
复制
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(:));

如果要组合索引,例如有奇数行-奇数列和偶数行-偶数列,只需计算两组索引,将它们连接到一个向量中,并执行与以前相同的语法。因此:

代码语言:javascript
复制
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);
票数 12
EN

Stack Overflow用户

发布于 2014-10-27 14:51:45

代码语言:javascript
复制
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 1case 4的索引,只需连接-

代码语言:javascript
复制
case14comb_ind = [case1_ind ; case4_ind]

编辑:

代码语言:javascript
复制
%// 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(:))

在其他情况下也要重复这个。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26590093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档