为什么逻辑指标隐式地重塑?有解决方案吗?

17日视图(30天)
我遇到过几次,它总是困扰我。例如我想和矩阵的每一行,值小于0.5:
一个=兰德(3);
B = 0(大小(A));
B (< 0.5) = (< 0.5);
row_sum = (B, 2)之和;
但是我感觉应该能简化这个问题,可以这样说:
row_sum =总和((< 0.5),2);
但这显然失败了因为< 0.5保持形状,一个向量(< 0.5)返回一个< 0.5矩阵的隐式线性化。
我为什么发生这种情况(0.5 >元素将在一个矩阵定义),但似乎不协调与逻辑指数是如何呈现给用户一种保形操作。毕竟,< 0.5返回一个逻辑矩阵和您需要调用找到(< 0.5)来访问线性指数用于生成一个(< 0.5)。
依我拙见,似乎这正是南应该存在。如果默认行为(< 0.5)返回NaN(> 0.5),然后与“omitnan”功能和默认启用会产生更直观的结果。我遗漏了什么东西?
回到地球,上面有实际可行的方法来简化过程?
4评论
乔尔·林奇
乔尔·林奇 2021年8月3日
编辑:乔尔·林奇 2021年8月3日
你能请给一个参考MATLAB文档…
我当然不想暗示MATLAB文档中有一个错误或不一致;我知道这是正常记录MATLAB的行为。我应该说“逻辑 操作 返回 用户为形状保持布尔矩阵”
我的观点是,这个规则似乎有悖常理的逻辑索引时主要使用的逻辑操作(或者他们不?)。为什么不返回线性指数(如发现(< 0.5)),实际上是用于逻辑索引,并使用一个逆函数 find (), 当矩阵是必要的?

登录置评。

接受的答案

Jakeb Chouinard
Jakeb Chouinard 2021年8月3日
编辑:Jakeb Chouinard 2021年8月3日
假设修改是不允许的,我觉得你接近你需要最简单的方法去做。
你也可以做一些类似:
一个=兰德(3);
B =一个;
B (B < 0.5) = 0;%或南,如果这是优先
和(B) 2)
或者:
一个=兰德(3);
cmpMatrix = > = 0.5;%比较矩阵
总和(a * cmpMatrix, 2)
2的评论
Jakeb Chouinard
Jakeb Chouinard 2021年8月3日
编辑:Jakeb Chouinard 2021年8月3日
的精神!至少这样你使用更少的空间,如果你需要再次调用比较矩阵,你最好让它存储。就因为我知道插件更愿意回答有问题被关闭一次,你可以选择我的回答作为一个公认的答案吗?
干杯!

登录置评。

更多的答案(0)

下载188bet金宝搏


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!