【python自用函数】负数向下取整,正数向上取整

1.最终结果

array = np.array([[1.2, -1.2], [2.5, -2.5]])
expanded_array = expand(array)
print(expanded_array)

[[ 2. -2.]
 [ 3. -3.]] 

2.取整知识

2.1.向上取整

取大于或等于给定数的最小整数

import math

# 示例
number = 4.1
result = math.ceil(number)
print(result)  # 输出:5

number = -4.1
result = math.ceil(number)
print(result)  # 输出:-4

2.2.向下取整

取小于或等于给定数的最大整数

import math

# 示例
number = 4.1
result = math.ceil(number)
print(result)  # 输出:5

number = -4.1
result = math.floor(number)
print(result)  # 输出:-5

3.其他知识

3.1.遍历数组(忽视维度)

3.1.1.展平

import numpy as np

# 示例:创建一个三维数组
array = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# 展平数组并遍历
for element in array.flatten():
    print(element)

3.1.2.np函数

import numpy as np

# 示例:创建一个三维数组
array = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# 使用 numpy.nditer 遍历数组
for element in np.nditer(array):
    print(element)

3.1.3.递归

import numpy as np

def iterate_array(array):
    if isinstance(array, np.ndarray):
        for element in array:
            iterate_array(element)
    else:
        print(array)

# 示例:创建一个三维数组
array = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# 调用递归函数
iterate_array(array)

3.2.整合代码

3.2.1.逐元素操作

numpy.ndenumerate 是一个生成器,可以同时返回数组中每个元素的索引和值

import numpy as np

def expand(array):
    for index, element in np.ndenumerate(array):
        if element > 0:
            array[index] = np.ceil(element)
        else:
            array[index] = np.floor(element)
    return array

3.2.2.布尔索引(效率高)

直接对数组中的元素进行批量操作

import numpy as np

def expand(array):
    # 正数向上取整
    array[array > 0] = np.ceil(array[array > 0])
    # 负数向下取整
    array[array < 0] = np.floor(array[array < 0])
    return array

3.2.3.where向量化处理(效率高)

根据条件选择性地修改数组中的值

import numpy as np

def expand(array):
    return np.where(array > 0, np.ceil(array), np.floor(array))

4.最终代码

import numpy as np

def expand(array):
    return np.where(array > 0, np.ceil(array), np.floor(array))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值