将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的上限,但是这个上限函数应用于数组中包含的每个元素的最佳方法是什么?
答案 0 :(得分:3)
请改用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.]]])
答案 1 :(得分:1)
你可以在python中使用map()
函数,它将方法作为第一个参数,将iterable作为第二个参数,并返回一个迭代,并在每个元素上应用给定的方法。
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]