查看: 627|回复: 2|关注: 0

[已答复] cellfun速度优化

[复制链接]

新手

10 麦片

财富积分


050


15

主题

49

帖子

0

最佳答案
  • 关注者: 1
发表于 2018-7-23 15:20:37 | 显示全部楼层 |阅读模式
如题,用m*n的cell存储了8位由0,1组成的数值向量,现在需要将cell中的每个元素转化为对应的十进制数,在测试的时候速度特别慢,想请问大家有没有更好的方法?关键代码在下面:
  1. vertical_diff_feature=cellfun(@FeatureEncoding,vertical_diff_cell);
复制代码
  1. function feature_value = FeatureEncoding(number_vector)
  2. [m,n]=size(number_vector);
  3. if m>n
  4.     number_vector=number_vector';
  5. end
  6. feature_value=bin2dec(num2str(number_vector))/255;
  7. end
复制代码
本身利用了vertical_cell_diff每个元素可以存储向量这一特性,但测试显示最为耗时的代码即为cellfun这一行,有什么好办法提升这块的速度?
原始的实际上是一个超大矩阵,矩阵的一个子块(8个值)实际上对应一个图像像素的二进制特征,转化为cell后进行了后续的操作。是否有更省时间的方法不转化为cell也能达到分块处理的效果,也请大家提提建议,感谢。

由大矩阵转化为小矩阵

由大矩阵转化为小矩阵

转为为cell前的大矩阵

转为为cell前的大矩阵

论坛优秀回答者

权威

3223 麦片

财富积分



2

主题

3508

帖子

724

最佳答案
  • 关注者: 148
发表于 2018-7-24 15:17:02 | 显示全部楼层
本帖最后由 maple1314168 于 2018-7-24 21:39 编辑

不要使用这两个命令 bin2dec、num2str
1、把原来的矩阵化为8*m(A)的矩阵,每列就是8位的二进制数,m就是行数。
2、B=2.^[7:-1:0]*A。
3、最后将B变为你需要的矩阵形式。

新手

10 麦片

财富积分


050


15

主题

49

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 2018-7-24 19:40:29 | 显示全部楼层
maple1314168 发表于 2018-7-24 15:17
不要使用这两个命令 bin2dec、num2str
1、把原来的矩阵化为8*m(A)的矩阵,每列就是6位的二进制数,m就是 ...

谢谢您的回复!亲测有效!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

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