如何对一组二进制字符串中的无序对的所有乘积求和

时间:2019-04-20 04:47:18

标签: python-3.x performance binary linear-algebra combinatorics

给定一组二进制字符串S,其中每个二进制字符串的长度为L,我想为每个唯一无序对找到这些字符串中无序元素对的所有乘积之和。然后,我想将它们放置在矩阵中,使得位置i,j是所有二进制字符串上无序索引对i,j的乘积之和。

例如:

S = {101, 110, 111}

第一个二进制字符串s∈S = 101具有无序对{10, 11, 01},其索引为{12, 13, 23}。每个无序对的乘积为{0, 1, 0}

第二个二进制字符串s∈S = 110具有无序对{11, 10, 10},其索引为{12, 13, 23}。每个无序对的乘积为{1, 0, 0}

第三个二进制字符串s∈S = 111具有无序对{11, 11, 11},其索引为{12, 13, 23}。每个无序对的乘积为{1, 1, 1}

总结产品,我们有{0, 1, 0} + {1, 0, 0} + {1, 1, 1} = {2, 2, 1}

现在,我想基于无序对{12, 13, 23}的索引将它们放置在数组中,其顺序在上面保持不变。因此:

0, 2, 2
2, 0, 1
2, 1, 0

我已经编写了一些Python代码,这些代码可以在嵌套的for循环中实现此功能,并且对于少量的短二进制字符串来说,它可以很好地工作。但是,我需要针对长度为150的{​​{1}}个字符串进行计算。

10,000

是否存在一些线性代数,二进制字符串或Python魔术技巧可以帮助加快速度?

1 个答案:

答案 0 :(得分:0)

感谢一位numpy大师的朋友提供了以下解决方案:

installed.packages()

可打印

<script>
import * as moment from "moment/moment";
export default {
  data() {
    return {
      printdata: [
        {
          name: "paraone"
        },
        {
          name: "<span>{{ new Date() | moment('MM.DD.YY') }}</span>"
        },
        {
          name: "parathree"
        },
        {
          name: "parafour"
        }
      ]
    };
  },
  methods: {
    changeDate: function() {
      var todaydate = new Date();
      moment(todaydate).format("YYYY-MM-DD");
      this.printdata[0].name = todaydate;
    }
  },
  created() {
    this.changeDate();
  }
};
</script>