[已解决] 怎么在多个矩阵中筛选出满足条件的元素

[复制链接]
板蓝233 发表于 2021-5-2 10:58:27
求求各位大侠帮帮忙
如何用matlab筛选出ABC三个矩阵中满足A中一个元素+B中一个元素+C中一个元素近似等于1的若干组三个元素?

最佳答案


gywxd 发表于 2021-5-2 13:07:19
result=[];
for A=[1 2 3]
for B=[4 5 6]
for C=[7 8 9];
result=[result;[A B C]];
end
end
end

然后对 result  进行各行求和, 对和进行比对, 得到结果。这样就非常简单快捷

5 条回复


gywxd 发表于 2021-5-2 11:37:37
简单点 多重循环一个一个的试。

板蓝233 发表于 2021-5-2 12:32:40
gywxd 发表于 2021-5-2 11:37
简单点 多重循环一个一个的试。

那如果是特别多的循环,假如有14个矩阵,多重循环运行起来太慢了,怎么优化这个多重循环呀

gywxd 发表于 2021-5-2 12:51:10
这个本来就是比较麻烦的事情,但是优化还是能优化的,起码减少70% 以上的算量,
例如
第一重循环  选取A矩阵一个值  x  ,对第二个矩阵B选值的时候 就可以直接 用 tmp=B(B<(1-x))   就用矩阵方式过滤掉了逻辑上不合理多余数据, 如此迭代到每一层循环,计算量小很多。

更好的优化, 选取 A 之后各矩阵的最小值,minc  mind  mine
第二层 优化的时候  tmp=B(B<(1-x-minc-mind-mine))  这样算了更小些。  
而且可以在每一层 得到 tmp 的时候进行 size 判断,如果 tmp 元素为空直接跳过外一层循环。

gywxd 发表于 2021-5-2 12:53:57
gywxd 发表于 2021-5-2 12:51
这个本来就是比较麻烦的事情,但是优化还是能优化的,起码减少70% 以上的算量,
例如
第一重循环  选取A矩 ...

如果你的电脑内存足够大,
可以生成   A B C  矩阵的的全连接矩阵,
然后对各行求和, 直接判断和接近1  的行 快速得到 全部解,比for 编程简单,

gywxd 发表于 2021-5-2 13:07:19
result=[];
for A=[1 2 3]
for B=[4 5 6]
for C=[7 8 9];
result=[result;[A B C]];
end
end
end

然后对 result  进行各行求和, 对和进行比对, 得到结果。这样就非常简单快捷
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表