【问题标题】:Numpy broadcasting bitwise union upon no bitwise intersection没有按位交集的 Numpy 广播按位联合
【发布时间】:2018-08-01 23:40:45
【问题描述】:

我正在编写一个具有常见场景的算法。我有两个大型整数数组。称它们为 k 和 j(因为我在测试代码中就是这样称呼它们的)。

我取 k 的每个元素,并将它与 j 的每个元素联合,但仅当两个元素的交集为零时。

例子:

j = np.zeros(3, dtype=int)
k = np.zeros(3, dtype=int)
k[0] = 2
k[1] = 6
k[2] = 10
j[0] = 2
j[1] = 8
j[2] = 1

for i in xrange(3):
    mask = (j&k[i] == 0)
    nextpart = (j|k[i])[mask]
    print i, nextpart
    print ""

0 [10 3]

1 [14 7]

2 [11]

问题 1

这种方法真的有效吗?我的算法主要基于这里的这个操作,所以知道最好的方法会产生很大的不同。

问题 2

对于每两个数组,我想将所有结果输出到一个一维数组中。正如我们所看到的,通过上面的方法,我输出到不同的数组。我想我可以使用某种连接方法,但根据我对数组的了解,我也怀疑这可能相对耗时。我可以就如何有效地完成这项工作提出一些建议。

谢谢。

【问题讨论】:

    标签: python arrays numpy bitwise-operators array-broadcasting


    【解决方案1】:

    问题 2 有点令人困惑。无论如何,你可以做 $ 和 |使用广播有效地操作。

    import numpy as np
    
    j = np.zeros(3, dtype=int)
    k = np.zeros(3, dtype=int)
    k[0] = 2
    k[1] = 6
    k[2] = 10
    j[0] = 2
    j[1] = 8
    j[2] = 1
    
    # alter shape to broadcast
    k_ = k[None].T
    r = (j|k_)[j&k_==0]
    print(r)
    

    这会导致

    [10  3 14  7 11]
    

    【讨论】:

      猜你喜欢
      • 2020-12-02
      • 1970-01-01
      • 2018-03-22
      • 2018-02-12
      • 1970-01-01
      • 2020-09-25
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多