找回密码
 注册
Simdroid-非首页
查看: 74|回复: 4

一个矩阵操作的问题

[复制链接]
发表于 2012-8-9 23:03:55 | 显示全部楼层 |阅读模式 来自 西班牙
a=[0.34 0.43 0.56 0.57 0.74 0.14 0.32]
这样一个矩阵如果a中的元素0<a(i)<0.4 则a(i)=a(i)/0.4
如果0.4<a(i)<1,则a(i)=(1-a(i))/0.6。因为这个操作有很多
部分,想进行矩阵化操作,不想用循环,求教该如何写这
段代码
发表于 2012-8-10 00:35:02 | 显示全部楼层 来自 上海浦东新区
Simdroid开发平台
本帖最后由 lovebaby 于 2012-8-10 00:35 编辑
  1. a(a<0.4) = a(a<0.4)/0.4;
  2. a(a>0.4) = (1 - a(a>0.4))/0.6;
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2012-8-10 04:52:15 | 显示全部楼层 来自 西班牙
lovebaby 发表于 2012-8-10 00:35

可以但是有一个问题 比如
a=[0.3 0.25 0.56 0.76]经过
a(a<0.4) = a(a<0.4)/0.4
a(a>0.4) = (1 - a(a>0.4))/0.6操作后得到的是
a = 0.7500    0.6250    0.5600    0.7600
和a =0.4167    0.6250    0.7333    0.4000
但是我想得到的是a=0.75 0.625 0.733 0.4
回复 不支持

使用道具 举报

发表于 2012-8-10 09:55:54 | 显示全部楼层 来自 上海浦东新区
本帖最后由 lovebaby 于 2012-8-10 09:56 编辑
lq0719 发表于 2012-8-10 04:52
可以但是有一个问题 比如
a=[0.3 0.25 0.56 0.76]经过
a(a0.4))/0.6操作后得到的是

这是因为第一步操作使得a中数据发生了变化,为了避免这个影响,可以这样:
  1. sIdx = a < 0.4;
  2. bIdx = a > 0.4;
  3. a(sIdx) = a(sIdx)/0.4;
  4. a(bIdx) = (1-a(bIdx))/0.6;
复制代码
或者干脆这样吧:
  1. a = (a<0.4).*a/0.4 + (a>0.4).*(1-a)/0.6;
复制代码
一句话搞定

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2012-8-10 16:15:28 | 显示全部楼层 来自 西班牙
lovebaby 发表于 2012-8-10 09:55
这是因为第一步操作使得a中数据发生了变化,为了避免这个影响,可以这样:或者干脆这样吧:一句话搞定 ...

解决了 十分感谢
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-2 02:44 , Processed in 0.031719 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表