【发布时间】:2016-01-08 12:02:37
【问题描述】:
作为更大算法的一部分,我需要生成数组相对于指定限制的残差。换句话说,我需要生成一个数组,给定someArray,它包含对someArray 的相应元素超过限制值的数量进行编码的元素。我最初的倾向是使用分布式比较来确定值何时超过阈值。如下:
# Generate some test data.
residualLimit = 1
someArray = 2.1.*(rand(10,10,3).-0.5)
# Determine the residuals.
someArrayResiduals = (residualLimit-someArray)[(residualLimit-someArray.<0)]
问题在于someArrayResiduals 是一个包含残差值的一维向量,而不是(residualLimit-someArray) 的掩码。如果您检查[(residualLimit-someArray.<0)],您会发现它的行为符合预期;它正在生成BitArray。问题是,为什么 Julia 不允许使用这个 BitArray 来掩盖 someArray?
使用int() 将Bools 在BitArray 中转换为Ints 并使用.* 进行分发会产生所需的结果,但有点不雅......请参阅以下内容:
# Generate some test data.
residualLimit = 1
someArray = 2.1.*(rand(10,10,3).-0.5)
# Determine the residuals.
someArrayResiduals = (residualLimit-someArray).*int(residualLimit-someArray.<0)
# This array should be (and is) limited at residualLimit. This is correct...
someArrayLimited = someArray + someArrayResiduals
有人知道为什么不能使用BitArray 来屏蔽数组吗?或者,有什么方法可以简化整个过程?
谢谢大家!
【问题讨论】:
-
检查这个语法:
(residualLimit-someArray).*(residualLimit-someArray.<0) -
怎么样:
max(someArray-residualLimit,0)
标签: multidimensional-array julia bitmask bitarray