将 math.ceil 应用于 python 中的数组

问题描述 投票:0回答:3

将 math.ceil 应用于整个数组的正确方法是什么?请参阅以下Python代码:

    index = np.zeros(len(any_array))
    index2 = [random.random() for x in xrange(len(any_array))
    ##indexfinal=math.ceil(index2)  <-?

我想返回数组中每个元素的上限值。文档指出 math.ceil 返回任何输入 x 的上限,但是将此上限函数应用于数组中包含的每个元素的最佳方法是什么?

python arrays numpy ceil
3个回答
5
投票

请使用

numpy.ceil()
功能。 Numpy 包提供大多数标准数学函数的矢量化版本。

In [29]: import numpy as np
In [30]: a = np.arange(2, 3, 0.1)
In [31]: a
Out[31]: array([ 2. ,  2.1,  2.2,  2.3,  2.4,  2.5,  2.6,  2.7,  2.8,  2.9])

In [32]: np.ceil(a)
Out[32]: array([ 2.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.])

此技术应该适用于任意

ndarray
对象:

In [53]: a2 = np.indices((3,3)) * 0.9

In [54]: a2
Out[54]:
array([[[ 0. ,  0. ,  0. ],
        [ 0.9,  0.9,  0.9],
        [ 1.8,  1.8,  1.8]],

       [[ 0. ,  0.9,  1.8],
        [ 0. ,  0.9,  1.8],
        [ 0. ,  0.9,  1.8]]])

In [55]: np.ceil(a2)
Out[55]:
array([[[ 0.,  0.,  0.],
        [ 1.,  1.,  1.],
        [ 2.,  2.,  2.]],

       [[ 0.,  1.,  2.],
        [ 0.,  1.,  2.],
        [ 0.,  1.,  2.]]])

3
投票

您可以在 python 中使用

map()
函数,该函数将方法作为第一个参数,将可迭代对象作为第二个参数,并返回一个在每个元素上应用给定方法的可迭代对象。

import math

arr = [1.2, 5.6, 8.0, 9.4, 48.6, 5.3]

arr_ceil = map(math.ceil, arr)

print arr_ceil

>>> [2.0, 6.0, 8.0, 10.0, 49.0, 6.0]

0
投票

最好、最干净、最简单、最优化的方法是这样的:

你可以使用任何样本数组,我使用随机的一个。所以我会按照你的要求为其元素设置一个上限。

我要过滤它的样本:[10 20 30 40 45 50 55 60 65 70 75 80]

代码片段:

import numpy as np
Sample_array = np.array([10,20,30,40,45,50,55,60,65,70,75,80])

Result = np.where(Sample_array > 45, 0, Sample_array)
print("Resulted array: ", Result)

结果数组:[10 20 30 40 45 0 0 0 0 0 0 0]

© www.soinside.com 2019 - 2024. All rights reserved.