【问题标题】:Most Pythonic way to prevent adding numbers to an array slot, or cap value, if addition will take number outside its datatype range [duplicate]防止将数字添加到数组槽或上限值的大多数 Pythonic 方法,如果添加将采用超出其数据类型范围的数字 [重复]
【发布时间】:2019-09-08 08:50:29
【问题描述】:

如果您将一个数字添加到一个数组槽中,使其超出其数据类型范围,它将在该范围之外循环并返回零。以 uint8 为例,其最大范围为 255:

z = np.zeros(2, dtype=np.uint8)

z[0]=z[0]+267

print(z[0])

> 11

我想防止任何使槽循环回零的添加。

我想出了这个功能

def ifAdd( addCand, numb):
    if addCand+numb >255:
        return
    else:
        addCand = addCand + numb

ifAdd(z[0], 267)

我想知道是否有更 Pythonic 的 numthonic 方式来执行此操作。或者至少是一种计算效率更高的方法。

【问题讨论】:

  • 对于数组 - np.where((255 - addCand) < numb,addCand,addCand+numb)?查看this post 了解更多信息。
  • 您的功能似乎已损坏。我敢打赌你需要addCand += numbelse 块中。它可能不适用于标量。

标签: python numpy


【解决方案1】:

lambda呢?

In [15]: z = np.zeros(2, dtype=np.uint8)                                        

In [16]: f = lambda x, y: x if x+y > 255 else x+y                               

In [17]: z[0] = f(z[0], 267)                                                    

In [18]: z                                                                      
Out[18]: array([0, 0], dtype=uint8)

In [19]: z[0] = f(z[0], 1)                                                      

In [20]: z                                                                      
Out[20]: array([1, 0], dtype=uint8)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2021-12-09
    相关资源
    最近更新 更多