Python 二进制矩阵项

Python 二进制矩阵项,python,numpy,matrix,binary,counting,Python,Numpy,Matrix,Binary,Counting,我有以下问题。我想创建一个大小为2^L x L+2的numpy矩阵。第一列是变量,我稍后在程序中定义。在最后的L列中,所有可能分配的零和一(在我看来,二进制计数可能是一个选项,参见示例)在第二列中都是1的数量。我需要这一列对第二列的矩阵进行排序 [[ x1, 0, 0, 0, 0] [ x2, 1, 0, 0, 1] [ x3, 1, 0, 1, 0] [ x4, 2, 0, 1, 1] [ x5, 1, 1, 0, 0] [ x6, 2, 1, 0, 1] [ x7,

我有以下问题。我想创建一个大小为2^L x L+2的numpy矩阵。第一列是变量,我稍后在程序中定义。在最后的L列中,所有可能分配的零和一(在我看来,二进制计数可能是一个选项,参见示例)在第二列中都是1的数量。我需要这一列对第二列的矩阵进行排序

[[ x1, 0,  0,  0,  0]
[ x2, 1, 0,  0,  1]
[ x3, 1, 0,  1,  0]
[ x4, 2, 0,  1,  1]
[ x5, 1, 1,  0,  0]
[ x6, 2, 1,  0,  1]
[ x7, 2, 1,  1,  0]
[ x8, 3, 1,  1,  1]]

这将为您提供一个元组列表,其中包含您描述的内容。当然,您可以更改为列表/数组/矩阵/任何内容

import itertools
L = []
k = 3
combs = itertools.combinations_with_replacement([0,1], k)
perms = [y for c in combs for y in set(itertools.permutations(c))]
for c in perms:
    L.append(('myvar',sum(c)) + c)
输出:

In [42]: L
Out[42]:
[('myvar', 0, 0, 0, 0),
 ('myvar', 1, 1, 0, 0),
 ('myvar', 1, 0, 1, 0),
 ('myvar', 1, 0, 0, 1),
 ('myvar', 2, 0, 1, 1),
 ('myvar', 2, 1, 1, 0),
 ('myvar', 2, 1, 0, 1),
 ('myvar', 3, 1, 1, 1)]
要将wrt排序为“列”(示例中的第1列),可以使用

import operator
sorted(L, key=operator.itemgetter(1))

为了解决你遇到的任何问题,你所要求的似乎不太可能是你真正需要的。这就是说,利用numpy的广播功能生成RHS非常容易:

>>> L = 3
>>> m = (np.arange(2**L)[:,None] >> np.arange(L)[::-1]) & 1
>>> m
array([[0, 0, 0],
       [0, 0, 1],
       [0, 1, 0],
       [0, 1, 1],
       [1, 0, 0],
       [1, 0, 1],
       [1, 1, 0],
       [1, 1, 1]], dtype=int32)
>>> np.hstack([m.sum(1,keepdims=True), m])
array([[0, 0, 0, 0],
       [1, 0, 0, 1],
       [1, 0, 1, 0],
       [2, 0, 1, 1],
       [1, 1, 0, 0],
       [2, 1, 0, 1],
       [2, 1, 1, 0],
       [3, 1, 1, 1]], dtype=int32)

您可以以类似的方式插入数据列。

为什么需要numpy(矩阵)?我认为这不是真的必要,因为我可以将矩阵转换为numpy矩阵。(我想稍后使用张量点)这个解决方案并没有创造所有的可能性,还是我错了?这是我的问题中的一个重要问题。我认为如果您选择itertools路线,您应该使用
product([0,1],repeat=k)
而不是
c\u w\u r
。对,它缺少排列。我编辑以使其正确。或者说产品。你可能是对的,但也就是说,你的解决方案解决了我的问题!谢谢:)在某些系统上,我对“keepdims”有问题。在我的mac和pycharm上,该程序运行完美,但在linux上,该程序无法启动。你知道会出什么问题吗?(TypeError:“keep dims”是此函数的无效关键字参数)@HighwayJohn:在它不起作用的系统上,您有一个过时的numpy版本。keepsdim实际上在做什么?