Python 迭代具有不同行的矩阵

Python 迭代具有不同行的矩阵,python,numpy,Python,Numpy,在所有行和列都不同的情况下,如何有效地迭代由0和1组成的所有h×n数组?目前我正在这样做 h = 10 n = 15 hxn = np.arange(h*n).reshape(h, -1) for i in xrange(0, 2**(h*n)): M = (i >> hxn) & 1 #DO WORK 但这包括许多具有相同行或列的二维数组。我也不关心行或列的顺序 我不想只测试每个M,看看它是否有重复的行或列,然后丢弃它们,因为这样会非常低效。我想找到一种方法,只

在所有行和列都不同的情况下,如何有效地迭代由0和1组成的所有h×n数组?目前我正在这样做

h = 10
n = 15
hxn = np.arange(h*n).reshape(h, -1)
for i in xrange(0, 2**(h*n)):
    M = (i >> hxn) & 1
#DO WORK
但这包括许多具有相同行或列的二维数组。我也不关心行或列的顺序



我不想只测试每个M,看看它是否有重复的行或列,然后丢弃它们,因为这样会非常低效。我想找到一种方法,只对数量少得多的矩阵进行迭代,而没有重复的行或列。

您可以使用Numpy的sum()函数设置新矩阵M和计算,如下所示

import numpy as np
h = 10
n = 15

M = np.zeros( (h,n), dtype ='float64' ) # create matrice M dimensioned h,n with floats
                                        # if you want integers instead of floats, change
                                        # dtype to 'int32'
hxn = np.arange(h*n).reshape(h, -1)

for i in xrange(0,h):   # loop in range h starting from 0
    for j in range(0,n):  # loop in range n from 0
        M[i,j] = sum([(i*j)*2])   # set matrice row and column, M[i,j] by sum([]) 

        print M

您是要先确定矩阵的行和列是否不同,然后再对它们进行操作,还是对给定矩阵中的每个不同行和/或列执行操作?@ap两者都不是。我想迭代所有h乘n矩阵的子集。那就是矩阵没有重复的行或列。你确定这是非常低效的吗?你想要什么形状的矩阵?@user2357112形状是h乘n。在这种情况下,二进制10×15矩阵的总数为2^(150)。但是没有重复的列行的二进制10×15矩阵的数量要小得多,实际上不是。一个非常粗略的上界表示,在10×15的二进制矩阵中,最多有10.4%的矩阵有重复的行或列。这似乎意味着只有h*n矩阵没有重复的行或列,但这是不对的。对,没有使用M=np创建的重复行。零((h,n),dtype='float64'),它严格根据h和n中的数据设置行和列。它汇总了h和n的所有出现次数,因此如果相同的两次出现,例如h=5 n=5出现两次,则列中会给出2,因此您不必添加*2,除非您希望将其两次出现乘以2。M不是二进制的。它们必须只包含0或1。然后M[i,j]+=1而不是M[i,j]=sum([(i*j)*2]),它将在h和n同时出现的列中返回1,在其余列中返回0。