24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1645  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿哈尔滨工业大学材料与化工方向336分 +5 辰沐5211314 2026-03-26 5/250 2026-03-28 01:48 by 飞行日记西
[考研] 求调剂 +6 白QF 2026-03-21 7/350 2026-03-28 00:42 by 白QF
[考研] 083000学硕274求调剂 +5 Li李鱼 2026-03-26 5/250 2026-03-27 23:17 by mmm just
[考研] 322求调剂 +4 宋明欣 2026-03-27 4/200 2026-03-27 22:02 by 催化大白
[考研] 一志愿北京化工大学 070300 学硕 336分 求调剂 +9 vv迷 2026-03-22 9/450 2026-03-27 15:59 by 不吃魚的貓
[考研] 307求调剂 +8 超级伊昂大王 2026-03-24 9/450 2026-03-27 15:34 by 超级伊昂大王
[考研] 279 分 求调剂 +4 睡个好觉_16 2026-03-24 4/200 2026-03-27 15:05 by 醉在风里
[考研] 299求调剂 +6 嗯嗯嗯嗯2 2026-03-27 6/300 2026-03-27 12:43 by 果果妈咪
[论文投稿] Journal of Mechanical Science and Technology +3 Russ_ss 2026-03-25 5/250 2026-03-27 10:49 by 陆小果画大饼
[考研] 081200-11408-276学硕求调剂 +4 崔wj 2026-03-26 4/200 2026-03-27 08:04 by chemisry
[考研] 材料考研求调剂 +3 Dendel 2026-03-23 6/300 2026-03-26 17:51 by fmesaito
[考研] 材料与化工328分调剂 +6 。,。,。,。i 2026-03-23 6/300 2026-03-25 22:30 by 418490947
[考研] 26考研-291分-厦门大学(085601)-柔性电子学院材料工程专业求调剂 +3 min3 2026-03-24 4/200 2026-03-25 18:22 by xcjcqu
[考研] 0854AI CV方向招收调剂 +4 章小鱼567 2026-03-23 4/200 2026-03-25 17:04 by CoderLoser
[考研] 求调剂 +3 李李不服输 2026-03-25 3/150 2026-03-25 13:03 by cmz0325
[考研] 生物学学硕求调剂 +7 小羊睡着了? 2026-03-23 10/500 2026-03-25 02:24 by 清风拂扬。 m
[考研] 求调剂一志愿武汉理工大学材料工程(085601) +5 WW.' 2026-03-23 7/350 2026-03-24 14:50 by sprinining
[考研] 求调剂 +5 Zhangbod 2026-03-21 7/350 2026-03-22 13:13 by Zhangbod
[考研] 285求调剂 +6 ytter 2026-03-22 6/300 2026-03-22 12:09 by 星空星月
[考研] 材料与化工(0856)304求 B区 调剂 +3 邱gl 2026-03-21 3/150 2026-03-21 13:47 by lature00
信息提示
请填处理意见