24小时热门版块排行榜    

查看: 1624  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿山东大学药学学硕求调剂 +3 开开心心没烦恼 2026-03-23 4/200 2026-03-24 00:06 by 开开心心没烦恼
[考研] 求材料,环境专业调剂 +3 18567500178 2026-03-18 3/150 2026-03-23 23:50 by 热情沙漠
[考研] 0854 考研调剂 招生了!AI 方向 +4 pk3725069 2026-03-19 16/800 2026-03-23 23:09 by 汪!?!
[考研] 一志愿211 初试270分 求调剂 +4 谷雨上岸 2026-03-23 5/250 2026-03-23 21:18 by 不惑可乐
[考研] 工科0856求调剂 +5 沐析汀汀 2026-03-21 5/250 2026-03-23 17:56 by 海瑟薇-
[考研] 323求调剂 +6 洼小桶 2026-03-18 6/300 2026-03-23 00:29 by king123!
[考博] 招收博士1-2人 +3 QGZDSYS 2026-03-18 4/200 2026-03-22 10:25 by QGZDSYS
[考研] 材料学硕333求调剂 +3 北道巷 2026-03-18 3/150 2026-03-21 18:17 by 学员8dgXkO
[考研] 268求调剂 +9 简单点0 2026-03-17 9/450 2026-03-21 15:37 by lature00
[考研] 303求调剂 +5 睿08 2026-03-17 7/350 2026-03-21 03:11 by JourneyLucky
[考研] 材料工程(专)一志愿985 初试335求调剂 +3 hiloiy 2026-03-17 4/200 2026-03-21 03:04 by JourneyLucky
[考研] 化学求调剂 +4 临泽境llllll 2026-03-17 5/250 2026-03-21 02:23 by JourneyLucky
[考研] 一志愿 西北大学 ,070300化学学硕,总分287,双非一本,求调剂。 +3 晨昏线与星海 2026-03-18 3/150 2026-03-21 00:46 by JourneyLucky
[考研] 317求调剂 +5 申子申申 2026-03-19 9/450 2026-03-20 22:26 by JourneyLucky
[考研] 一志愿苏州大学材料求调剂,总分315(英一) +5 sbdksD 2026-03-19 5/250 2026-03-20 22:10 by luoyongfeng
[考研] 中南大学化学学硕337求调剂 +3 niko- 2026-03-19 6/300 2026-03-20 21:58 by luoyongfeng
[考研] 290求调剂 +7 ^O^乜 2026-03-19 7/350 2026-03-20 21:43 by JourneyLucky
[考研] 材料学硕297已过四六级求调剂推荐 +11 adaie 2026-03-19 11/550 2026-03-20 21:30 by laoshidan
[考研] 本科郑州大学物理学院,一志愿华科070200学硕,346求调剂 +4 我不是一根葱 2026-03-18 4/200 2026-03-19 09:11 by 浮云166
[考研] 材料,纺织,生物(0856、0710),化学招生啦 +3 Eember. 2026-03-17 9/450 2026-03-18 10:28 by Eember.
信息提示
请填处理意见