numpy函数np.around()、np.floor()、np.ceil()、np.where()介绍(清晰明白)

1. 功能简单介绍

  • np.around()函数用于返回五舍六入后的值,可指定精度。
  • np.floor()函数用于以元素方式返回输入的下限。
  • np.ceil()函数用于以元素方式返回输入的上限。
  • np.where()函数根据 condition 从 x 和 y 中选择元素,当为 True 时,选 x,否则选 y。

2. 详细介绍

2.1.np.around

np.around(a, decimals=0, out=None )
  对于正好在舍入小数值之间的值,NumPy舍入到最接近的偶数值。当超过5时候(不包含5),才会进位!因此,1.5和2.5轮到2.0,-0.5和0.5轮到0.0等。
参数:
a : array_like。输入数据。
decimals : int,可选。要舍入的小数位数(默认值:0)。如果小数为负数,则指定小数点左侧的位置数。
out : ndarray,可选。替代输出数组,用于放置结果。它必须具有与预期输出相同的形状,但如果需要,将输出输出值的类型。

返回:
rounded_array : ndarray。与a相同类型的数组,包含舍入值。除非指定了out,否则将创建一个新数组。返回对结果的引用。复数的实部和虚部分别舍入。舍入浮点数的结果是浮点数。

  • 例1.
>>> np.around([0.37, 1.64])
array([ 0.,  2.])
>>> np.around([0.37, 1.64], decimals=1)
array([ 0.4,  1.6])
>>> np.around([.5, 1.5, 2.5, 3.5, 4.5]) # rounds to nearest even value
array([ 0.,  2.,  2.,  4.,  4.])
>>> np.around([1,2,3,11], decimals=1) # ndarray of ints is returned
array([ 1,  2,  3, 11])
>>> np.around([1,2,3,11], decimals=-1)
array([ 0,  0,  0, 10])

2.2. np.floor()

np.floor(x, /, out=None, *, where=True, 
	casting='same_kind', order='K', dtype=None, 
	subok=True[, signature, extobj]) = <ufunc 'floor'>

参数

x : array_like。输入数据。
out : ndarray,None或ndarray和None的元组,可选。存储结果的位置。如果提供,它必须具有输入广播的形状。如果未提供或None,则返回新分配的数组。元组(仅可作为关键字参数)的长度必须等于输出的数量。
where : array_like,可选。值True表示计算该位置的ufunc,值False表示仅将值保留在输出中。

返回:
y : ndarray或标量。x中每个元素的底限。如果x是标量,则这是标量。

  • 例2
>>> a = np.array([-2.5, -1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
>>> np.floor(a)
array([-3., -2., -2., -1.,  0.,  1.,  1.,  2.])

2.3. np.ceil()

np.ceil(x, /, out=None, *, where=True, 
	casting='same_kind', order='K', dtype=None, 
	subok=True[, signature, extobj]) = <ufunc 'ceil'>

参数:
x : array_like。输入数据。
out : ndarray,None或ndarray和None的元组,可选。存储结果的位置。如果提供,它必须具有输入广播的形状。如果未提供或None,则返回新分配的数组。元组(仅可作为关键字参数)的长度必须等于输出的数量。
where : array_like,可选。值True表示计算该位置的ufunc,值False表示仅将值保留在输出中。

返回:
y : ndarray或标量。x中每个元素的上限,带floatdtype。如果x是标量,则这是标量。

  • 例3
>>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
>>> np.ceil(a)
array([-1., -1., -0.,  1.,  2.,  2.,  2.])

2.4. np.where()

np.where(condition,x,y)

如果只给出条件,则返回condition.nonzero()。

参数:
condition:array_like,bool。如果为True,则产生x,否则产生y。
x,y:array_like,可选。要从中选择的值。x,y和条件需要可以广播broadcastable到某种形状。

返回:
out:ndarray或ndarray元组。如果同时指定了x和y,则输出数组包含x的元素,其中condition为True,其他元素来自 y。如果只给出条件,则返回元组condition.nonzero(),条件为True 的索引。

  • 例4
# 如果给出x和y并且输入数组是1-D,where则相当于:
[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
  • 例5
>>> np.where([[True, False], [True, True]],
...          [[1, 2], [3, 4]],
...          [[9, 8], [7, 6]])
array([[1, 8],
       [3, 4]])
>>> np.where([[0, 1], [1, 0]])
(array([0, 1], dtype=int64), array([1, 0], dtype=int64))
  • 例6
>>> x = np.arange(9.).reshape(3, 3)
>>> print(x)
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]

>>> np.where( x > 5 )
(array([2, 2, 2]), array([0, 1, 2]))
>>> x[np.where( x > 3.0 )]               # Note: result is 1D.
array([ 4.,  5.,  6.,  7.,  8.])
>>> np.where(x < 5, x, -1)               # Note: broadcasting.
array([[ 0.,  1.,  2.],
       [ 3.,  4., -1.],
       [-1., -1., -1.]])
       
>>> goodvalues = [3, 4, 7]
>>> ix = np.isin(x, goodvalues)
>>> ix
array([[False, False, False],
       [ True,  True, False],
       [False,  True, False]])
>>> np.where(ix)
(array([1, 1, 2]), array([0, 1, 1]))

你可能感兴趣的:(python,numpy)