24小时热门版块排行榜    

查看: 2161  |  回复: 11

abingchem

木虫 (著名写手)


[交流] 【求助】如何提取矩阵前两行>5的数据?

假如有矩阵:A=magic(10);
现在要提取A前两行中大于5的元素,除了循环遍历还有更好的办法吗?
目前想到的是可以用逻辑数组得到前两行的逻辑数组,但后面怎么处理呢?

前提是不能将前两行元素提出来赋值给另一变量
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lds588

铁杆木虫 (著名写手)


★ ★ ★
abingchem(金币+1):谢谢参与
robert2020(金币+2):多谢应助!欢迎常来仿真模拟版交流! 2011-01-11 10:56:56
引用回帖:
Originally posted by abingchem at 2011-01-05 13:41:11:
假如有矩阵:A=magic(10);
现在要提取A前两行中大于5的元素,除了循环遍历还有更好的办法吗?
目前想到的是可以用逻辑数组得到前两行的逻辑数组,但后面怎么处理呢?

前提是不能将前两行元素提出来赋值给另一 ...

[r,c,v]= find(A(1:2,: ) > 5);
r,c为大于5的元素的行列标
2楼2011-01-05 13:56:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

abingchem

木虫 (著名写手)


引用回帖:
Originally posted by lds588 at 2011-01-05 13:56:59:


[r,c,v]= find(A(1:2,: ) > 5);
r,c为大于5的元素的行列标

知道了r,c之后,怎么用这两个数组引用A的元素呢?谢谢
3楼2011-01-05 14:28:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

abingchem

木虫 (著名写手)


引用回帖:
Originally posted by abingchem at 2011-01-05 14:28:42:


知道了r,c之后,怎么用这两个数组引用A的元素呢?谢谢

为什么A(r,c)这样的引用不能通过?
4楼2011-01-05 15:34:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
★
abingchem(金币+1):谢谢参与
引用回帖:
Originally posted by abingchem at 2011-01-05 15:34:13:


为什么A(r,c)这样的引用不能通过?

MATLAB中的数组、矩阵是以列为主序的。
用find返回的行列是一个列的数组,不能使用A( r, c )直接全部引用。
但是引用A前两行中满足条件的单个元素。
5楼2011-01-05 16:29:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

abingchem

木虫 (著名写手)


引用回帖:
Originally posted by xiegangmai at 2011-01-05 16:29:18:


MATLAB中的数组、矩阵是以列为主序的。
用find返回的行列是一个列的数组,不能使用A( r, c )直接全部引用。
但是引用A前两行中满足条件的单个元素。

那怎么办才可以呢?看了其他论坛,除了循环遍历,似乎也没有好办法。
6楼2011-01-05 16:43:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
★ ★ ★ ★
abingchem(金币+1):谢谢参与
robert2020(金币+3):辛苦了! 2011-01-11 10:57:22
引用回帖:
Originally posted by abingchem at 2011-01-05 16:43:46:


那怎么办才可以呢?看了其他论坛,除了循环遍历,似乎也没有好办法。

关键是看你用做什么,需要以什么样的方式返回?

首先能确定的是不能得到矩阵,因为行列中元素个数不确定。
如果要一个一个引用,就用循环。
CODE:
A = magic( 10 );
[ r, c ]= find( A( 1 : 2, : ) > 5 );
n = length( r );

for i = 1 : n
B( i ) = A( r( i ), c( i ) );
end

如果直接返回一维数组,可以这样试试:
CODE:
A = magic( 10 );
[ m, n ] = size( A );
B = reshape( A( 1 : 2, : ), 1, 2 * n );
l = find( A( 1 : 2, : ) > 5 );
C = B( l );

[ Last edited by xiegangmai on 2011-1-5 at 21:14 ]
7楼2011-01-05 18:00:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lds588

铁杆木虫 (著名写手)


★
小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by abingchem at 2011-01-05 16:43:46:


那怎么办才可以呢?看了其他论坛,除了循环遍历,似乎也没有好办法。

楼上说的很明白了,我相信你看懂了~~~
8楼2011-01-05 22:41:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

abingchem

木虫 (著名写手)


引用回帖:
Originally posted by xiegangmai at 2011-01-05 18:00:20:


关键是看你用做什么,需要以什么样的方式返回?

首先能确定的是不能得到矩阵,因为行列中元素个数不确定。
如果要一个一个引用,就用循环。

[code]
A = magic( 10 );
[ r, c ]= find( A( 1 : 2, : ) ...

看来结论是无论怎样得到的逻辑数组也好、或者位置索引也好,并不能对原矩阵直接引用~

多谢!
9楼2011-01-06 08:33:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

abingchem

木虫 (著名写手)


引用回帖:
Originally posted by lds588 at 2011-01-05 22:41:16:

楼上说的很明白了,我相信你看懂了~~~

恩,相当明白!
10楼2011-01-06 08:36:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

abingchem

木虫 (著名写手)


引用回帖:
Originally posted by xiegangmai at 2011-01-05 18:00:20:


关键是看你用做什么,需要以什么样的方式返回?

首先能确定的是不能得到矩阵,因为行列中元素个数不确定。
如果要一个一个引用,就用循环。

[code]
A = magic( 10 );
[ r, c ]= find( A( 1 : 2, : ) ...

不如这样写了:
A=magic(10);
B=A(1:2,;
C=B(B>5);
11楼2011-01-06 08:38:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

uiui

新虫 (小有名气)


★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
xiegangmai(金币+2):辛苦了! 2011-01-07 21:58:54
lz提出的问题很有意思,我以前也碰到过,当然最直接的方法就是把子数组提出来。
如果硬要引用原数组,也有变通的办法:

1. 用ls提出的下标法,不过要把二维下标转为一维下标:
A=magic(10);
[r,c]=find(A(1:2,: )>5);
B=A(sub2ind(size(A),r,c))
这里注意,不能用 ind=find(A(1:2,: )>5); 直接得到一维下标,因为该一维下标是基于子数组的

2. 还可以用另一种方法,将得到的子数组的逻辑值补零,变为原数组的逻辑值再引用
A=magic(10);
C=A([A(1:2,: )>5;logical(zeros(8,10))])

[ Last edited by uiui on 2011-1-6 at 11:35 ]
12楼2011-01-06 10:43:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 abingchem 的主题更新
普通表情 龙 兔 虎 猫 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +8 zSbvVX9JFl9J 2026-11-09 9/450 2026-11-13 11:11 by Equinoxhua
[硕博家园] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +5 C6CRn66RYYXS 2026-11-10 9/450 2026-11-13 11:02 by Equinoxhua
[基金申请] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +6 C6CRn66RYYXS 2026-11-10 7/350 2026-11-13 10:55 by Equinoxhua
[考博] 27博士申请 +5 白白白ly 2026-11-09 5/250 2026-11-13 05:01 by wlf1982
[教师之家] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +6 czAiolzR0IJC 2026-11-10 6/300 2026-11-12 16:55 by zzy933268
[论文投稿] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 TgvkbZZl9tqB 2026-11-11 4/200 2026-11-12 12:51 by ECLTXnJnRSXf
[硕博家园] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 TgvkbZZl9tqB 2026-11-11 4/200 2026-11-12 12:28 by ECLTXnJnRSXf
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 Z7qfCsdIiD1T 2026-11-10 7/350 2026-11-12 11:31 by HajghKOMynmz
[硕博家园] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 Z7qfCsdIiD1T 2026-11-10 6/300 2026-11-12 11:22 by HajghKOMynmz
[教师之家] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 Z7qfCsdIiD1T 2026-11-10 7/350 2026-11-12 11:22 by HajghKOMynmz
[教师之家] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +4 Z7qfCsdIiD1T 2026-11-10 5/250 2026-11-12 11:14 by HajghKOMynmz
[基金申请] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +5 czAiolzR0IJC 2026-11-10 9/450 2026-11-12 11:11 by HajghKOMynmz
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +5 czAiolzR0IJC 2026-11-10 7/350 2026-11-12 11:09 by HajghKOMynmz
[基金申请] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +5 G2rhSvqvhNzl 2026-11-10 7/350 2026-11-12 10:49 by HajghKOMynmz
[考研] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +6 FChKX8meu1ds 2026-11-09 8/400 2026-11-12 09:41 by HajghKOMynmz
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +7 0TEMgxdT1eIw 2026-11-09 9/450 2026-11-12 09:24 by HajghKOMynmz
[教师之家] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 TgvkbZZl9tqB 2026-11-11 3/150 2026-11-12 08:26 by HajghKOMynmz
[基金申请] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 TgvkbZZl9tqB 2026-11-11 5/250 2026-11-12 08:15 by HajghKOMynmz
[考研] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +5 FChKX8meu1ds 2026-11-09 8/400 2026-11-12 05:30 by 9fOTqj074tIg
[公派出国] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 zSbvVX9JFl9J 2026-11-09 8/400 2026-11-12 04:57 by 9fOTqj074tIg
信息提示
请填处理意见