我正在寻找最佳(最快)的方法来找到numpy中两个数组之间的确切重叠.给定两个数组x和y
x = array([1,0,3,0,5,0,7,4],dtype=int)
y = array([1,4,0,0,5,0,6,4],dtype=int)
我想得到的是一个长度相同的数组,只包含两个相等的数字:
array([1,0,0,0,5,0,0,4])
首先我试过了
x&y
array([1,0,0,0,5,0,6,4])
然后我意识到,对于两个数字,如果它们是>则总是如此. 0.
解决方法:
result = numpy.where(x == y, x, 0)
请查看numpy.where文档以获取解释.基本上,numpy.where(a,b,c),对于条件a,返回形状a的数组,并且具有来自b或c的值,这取决于a的对应元素是否为真. b或c可以是标量.
顺便说一下,x&对于两个正数,y不一定是“总是正确的”.它对x和y中的元素执行bitwise-and:
x = numpy.array([2**p for p in xrange(10)])
# x is [ 1 2 4 8 16 32 64 128 256 512]
y = x - 1
# y is [ 0 1 3 7 15 31 63 127 255 511]
x & y
# result: [0 0 0 0 0 0 0 0 0 0]
这是因为x中每个元素的按位表示形式为1,后跟n个零,y中的对应元素为n 1s.通常,对于两个非零数字a和b,a& b可以等于零,或者非零,但不一定等于a或b.
标签:python,numpy
来源: https://codeday.me/bug/20190726/1546893.html