- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一些功能,大型分析软件的一部分,需要 bool 掩码将数组项分成两组。这些函数是这样的:
def process(data, a_mask):
b_mask = -a_mask
res_a = func_a(data[a_mask])
res_b = func_b(data[b_mask])
return res_a, res_b
现在,我需要将这些函数(未经修改)用于一个只有“a”类项目的大数组,但我想节省 RAM 并且不传递所有 True 的 bool 掩码
。例如,我可以传递像 slice(None, None)
这样的切片。
问题是如果 a_mask
是一个切片,行 b_mask = -a_mask
将失败。理想情况下,-a_mask
应该提供 0 项选择。
我正在考虑创建一个“修改过的”切片对象,将 __neg__()
方法实现为空切片(例如 slice(0, 0)
)。我不知道这是否可能。
允许不修改 process()
函数但同时避免分配全真 bool 数组的其他解决方案也将被接受。
最佳答案
不幸的是,我们无法将 __neg__()
方法添加到 slice
,因为它 cannot be subclassed .但是,tuple
可以被子类化,我们可以用它来保存单个 slice
对象。
这让我想到了一个非常非常非常的讨厌的 hack,它应该对你有用:
class NegTuple(tuple):
def __neg__(self):
return slice(0)
我们可以创建一个包含单个切片对象的 NegTuple
:
nt = NegTuple((slice(None),))
这可以用作索引,将它取反会产生一个空切片,导致索引长度为 0 的数组:
a = np.arange(5)
print a[nt]
# [0 1 2 3 4]
print a[-nt]
# []
不过,你必须非常绝望地求助于这样的事情。像这样修改 process
是完全不可能的吗?
def process(data, a_mask=None):
if a_mask is None:
a_mask = slice(None) # every element
b_mask = slice(0) # no elements
else:
b_mask = -a_mask
res_a = func_a(data[a_mask])
res_b = func_b(data[b_mask])
return res_a, res_b
这是更明确的方式,应该不会对其当前用例的行为产生任何影响。
关于 python / NumPy : negate or complement a slice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666991/
后一种表示看起来更容易理解。为什么大多数语言都选择前一种?我想 Two's complement 中一定有一些独特的优势特征,使数据操作更容易。 最佳答案 语言不指定数字格式;硬件确实如此。询问 In
我正在阅读有关二进制补码的内容,我知道这种方法最有效,但也可能存在一些缺点。我找不到任何缺点,是否存在转换为二进制补码无法正确表示数字的情况? 最佳答案 二进制补码很棒 - 这就是每个人都使用它的原因
形成二进制数的二进制补码的一种快捷方法是从右边复制位,直到复制了一位,然后对剩余的位进行补码(反转)。 这在 SO here 上有解释以及 Wikipedia . 没有解释的是为什么这个快捷方式有效,
所以我想代表数字-12.5。因此12.5等于: 001100.100 如果我不计算分数,那么它很简单,-12是: 110100 但是-12.5是多少?是110100.100吗?如何计算此负分数? 最佳
我对如何进行从一个补码到二进制补码的转换感到困惑。假设我们有 10101101 的补码。如何将其转换为二进制补码? 谢谢 最佳答案 只看定义: One's complement 表示取反值中的位是原值
在二进制数系统中表示负数时,2 的补码相对于 1 的补码有什么优势?它如何影响二进制系统中数字的特定位表示形式存储的值的范围? 最佳答案 二进制补码相对于二进制补码的主要优点是二进制补码只有一个零
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我的代码是一个将十进制转换为二进制的类。它将显示二进制、一个的补码和两个的补码。到目前为止,我已经弄清楚了补码,但在找到补码的解决方案时遇到了问题。我的计划是使用一个补码的输出作为二进制补码方法的输入
我有一些功能,大型分析软件的一部分,需要 bool 掩码将数组项分成两组。这些函数是这样的: def process(data, a_mask): b_mask = -a_mask r
当我给出例如:-2 或 -8 时,我得到 110, 11000。但我想得到 10, 1000,因为它必须使用最小二进制数。所以我必须用另一种方式来应对消极的情况。我尝试交换 1 和 0 直到达到 LS
我找不到办法做到这一点... raw_string a a [1] "\"+001\", M. http://goo.gl/3EXxy6 via @MYTF1News" 最佳答案 我也会使用循环:
我查看了 ISA 规范并在互联网上搜索了此问题的答案,但我找不到。 在 RISC-V ISA 中,负数应该用一个补码还是二进制补码表示?或者,这个决定是否留给实现者? 我问的原因是我正在编写一个 RV
假设2的补码表示的5位数字可以表示的最大值和最小值是多少? 我是否找到了 5 位数字的最小值和最大值,它们是 00000,但我不确定最大值是多少。然后转换为二进制补码?这听起来很愚蠢,但这是我唯一能想
我了解ramda的complement函数的使用,该函数会反转谓词的返回。我无法理解的是为什么使用“complement” 作为名称。 const invertPredicate = R.comple
目前我可以从这样的表中获取不同的条目: SELECT DISTINCT ON (abc.entry) abc.* FROM table abc JOIN table1 def ON abc.e
-1可以4位二进制表示为(2的补码)1111 15也表示为1111。 那么,CPU从内存中获取值时如何区分15和-1? 最佳答案 当一个字节从一个位置移到另一个位置时,CPU并不关心该字节是保留-1还
我有 3 种补充给定二进制数的方法。第一种和第三种方法不会出现任何整数溢出错误。你能解释一下为什么第二种方法会出现这个运行时错误吗? 这是代码: int findComplement1(int nu
我已经包含了我遇到逻辑问题的程序。该程序基于 booth 的算法,我已经放了一个片段。在这个“工作”代码片段中,用户在数组 (a[0]=1 LSB) 的帮助下接受十进制数转换为十进制形式,最后计算数组
这是一个非常幼稚的问题(我知道),但我认为这将是一个很好的起点,可以考虑如何实际执行 CPU 的基本指令集: 在二进制补码系统中,您不能反转您的实现可以表示的最大负数的符号。理论上的原因很明显,最大负
我正在开始 Python 编程。我正在阅读基本教程,但这一点对我来说不是很清楚。如果您能给我任何帮助,我将不胜感激。 最佳答案 ~3 表示“反转”3。使用 two's complement在自然数数据
我是一名优秀的程序员,十分优秀!