【问题标题】:How to convert decimals in a matrix to integers? [closed]如何将矩阵中的小数转换为整数? [关闭]
【发布时间】:2015-08-18 15:46:56
【问题描述】:

如果我的输入矩阵是:

v =

       -0.7071    0.5774    0.4082
        0.0000   -0.5774    0.8165
        0.7071    0.5774    0.4082

输出应该是:

v =
       -1         1         1
        0        -1         2
        1         1         1

【问题讨论】:

  • 如何从输入到输出??? ceil(v*2)???
  • ceil(v*2) 没有给出想要的结果。我正在尝试将矩阵中的小数简化为最低整数。
  • “将矩阵中的小数化为最小整数”是什么意思?你必须定义它。
  • 0.8 怎么去2
  • 只是为了成为“那个家伙”,整数也是十进制值。

标签: matlab matrix


【解决方案1】:
[A,B] = size(v)
for ii = 1:B
    v(:,ii) = v(:,ii)./abs(min(v(:,ii)));
end

如果这是您所拥有的确切示例。

以防双打不够好:

v = int32(v); % or whichever integer you want

bsxfun 方式,感谢@rayryeng:

v = bsxfun(@rdivide, v, abs(min(v,1)));

【讨论】:

  • 我会将其替换为 v = bsxfun(@rdivide, v, abs(min(v,1)));... 它应该更快,但 +1 用于破译 OP 试图做什么。
  • 我对调用匿名函数的函数(例如arrayfun、accumarray、bsxfun)相当缺乏经验,所以我总是乐于学习新事物,谢谢!
  • 啊 :) 不客气。好吧,bsxfun 做了所谓的数据广播。 rdivide 是执行右数组除法的函数(即A ./ B)。这个函数调用具体会做的是先求v的每一列的最小值,求绝对值,然后复制这个向量与v的大小一致,然后做一个元素- 明智的权利划分。这实际上执行了循环代码所做的事情。 bsxfun 在两个输入之间进行 repmat 调用,以便它们在大小上匹配,然后在每个输入之间应用第一个参数的操作。
  • 顺便说一句,如果您有时间,请来我们的 MATLAB 聊天室访问。我们始终欢迎新用户加入 StackOverflow! chat.stackoverflow.com/rooms/81987/matlab-and-octave - ...另外,欢迎来到 StackOverflow!
猜你喜欢
  • 1970-01-01
  • 2021-11-25
  • 2015-07-26
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多