繁体   English   中英

如何像正常的`int`加法一样增加`numpy.ndarray`溢出?

[英]How can I increment a `numpy.ndarray` with overflowing like a normal `int` addition is done?

我有两个小端格式的字节列表l1l2 ,我想将它们加在一起,就像两个整数相加一样。

l1 = [0xf0, 0xff]
l2 = [0x31]

我可以将列表转换为int ,将值相加并再次获取原始列表中最长的字节数。 就像在第一个例子中一样:

length = max(len(l1), len(l2))
val1 = int.from_bytes(l1, "little")
val2 = int.from_bytes(l2, "little")
l3 = list((val1 + val2).to_bytes(length+1, "little"))[:length]

在此示例中,结果将是l3 == [0x21, 0x00]

两个Z3B7F949B2343F9E5390​​E29F6EF5E1778Z arrays相加的问题是两个arrays相加没有考虑溢出。 就像在第二个例子中一样:

import numpy as np
arr1 = np.array(l1, dtype=np.uint8)
arr2 = np.array(l2, dtype=np.uint8)
# padding with 0's is needed for the same length of the two arrays
if arr1.shape[0] < arr2.shape[0]:
    arr1 = np.pad(arr1, (0, length - arr1.shape[0]))
elif arr2.shape[0] < arr1.shape[0]:
    arr2 = np.pad(arr2, (0, length - arr2.shape[0]))

arr3 = arr1 + arr2

第二个示例中的结果将是np.all(arr3 == np.array([0x21, 0xff], dtype=np.uint8)) ,这与第一个示例中的结果不同。

现在我想问一下 Z3B7F949B2343F9E5390​​E29F6EF5E1778Z 库中是否已经有类似的方法,就像第一个示例显示的那样?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM