【问题标题】:Numpy floor float values to intNumpy floor float 值转换为 int
【发布时间】:2021-03-06 03:20:20
【问题描述】:

我有一组浮点数,我想将它们设为最接近的整数,所以我可以将它们用作索引。

例如:

In [2]: import numpy as np

In [3]: arr = np.random.rand(1, 10) * 10

In [4]: arr
Out[4]:
array([[4.97896461, 0.21473121, 0.13323678, 3.40534157, 5.08995577,
        6.7924586 , 1.82584208, 6.73890807, 2.45590354, 9.85600841]])

In [5]: arr = np.floor(arr)

In [6]: arr
Out[6]: array([[4., 0., 0., 3., 5., 6., 1., 6., 2., 9.]])

In [7]: arr.dtype
Out[7]: dtype('float64')

地板后它们仍然是浮点数,有没有办法自动将它们转换为整数?

【问题讨论】:

  • 这个问题有点令人困惑:您在区间[0.0, 1.0) 中生成随机值,然后取这些值的下限。但这总是会给你一个零数组,所以在这里使用np.random.rand 似乎有点毫无意义。你真的想生成更大范围内的随机值吗?
  • 我做到了,好点!同样的问题仍然存在。

标签: python numpy math floor


【解决方案1】:

我用@DanielF 解释编辑答案: “floor 不会转换为整数,它只是给出整数值的浮点数,所以你仍然需要一个 astype 来更改为 int” 检查此代码以了解解决方案:

import numpy as np
arr = np.random.rand(1, 10) * 10
print(arr)
arr = np.floor(arr).astype(int)
print(arr)
OUTPUT:
[[2.76753828 8.84095843 2.5537759  5.65017407 7.77493733 6.47403036
  7.72582766 5.03525625 9.75819442 9.10578944]]
[[2 8 2 5 7 6 7 5 9 9]]

【讨论】:

  • 试着给出一些解释,而不仅仅是代码。即使只是从“floor 不会转换为整数,它只是给出整数值的floats,所以你仍然需要一个astype 来更改为int”开始,这将使审查队列远离你。
【解决方案2】:

为什么不直接使用:

np.random.randint(1,10)

【讨论】:

  • 这已经足够接近答案了,我不会标记它,但是一旦您获得这些特权,这可能应该是一个评论。它不是真正解决这个问题,但可能是一个并行的解决方案。
  • 这里的参数110np.random.rand(1, 10) 中的含义非常不同:参数是结果数组的形状;在这里,您要求一个结果,110 给出界限。完全不清楚 OP 是否需要 1 到 10 范围内的整数。(我已在评论中要求澄清。)
  • @DanielF 是的,这应该是评论,但由于我还没有解锁,所以无法评论。
  • @MarkDickinson 好吧,如果您使用 size 参数,您可以获得一个具有大小的数组(例如:randint (low=0,high=10,size=10) 的参数),并且如他所愿将它们用作索引,我猜测它是一个整数是我想要的。但我同意他可以指定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多