2014-02-14 4 views
0

Как эффективно выполнять итерацию по всем h по n массивам из 0s и 1s, где все строки и все столбцы различны? На данный момент я это делаю.Итерация над матрицами с различными строками

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 

Но это включает в себя множество 2-мерных массивов со строками или столбцами, которые являются одинаковыми. Я также не забочусь о порядке строк или столбцов.


Я не хочу, чтобы просто проверить каждый M, чтобы увидеть, если он имеет повторяющиеся строки или столбца и отбросить те, как это будет крайне неэффективна. Я хотел бы найти способ просто перебрать гораздо меньшее количество матриц без дублированных строк или столбцов.

+0

Вы пытаетесь сначала определить, является ли или нет, различны строки и перевалы матрицы, а затем работать на них, или выполнить операцию на каждую отдельную строку и/или седловины в данной матрице? –

+0

@ap Ни один из них. Я хочу перебрать подмножество всех h на n матриц. Это просто матрицы не имеют дублированных строк или столбцов. – marshall

+0

Вы уверены, что это очень неэффективно? Какую форму матрицы вы ожидаете? – user2357112

ответ

0

Вы можете установить новую матрицу M и вычисления с помощью функции sum() Numpy, как это;

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 
+0

Это, по-видимому, подразумевает наличие только h * n-матриц без дублированных строк или столбцов, но это неправильно. – marshall

+0

Правильно, нет дублированных строк, созданных с помощью M = np.zeros ((h, n), dtype = 'float64'), он строит строки и столбцы строго из данных в h и n. Он суммирует все вхождения h и n, поэтому, если два вхождения одного и того же, например h = 5 n = 5, происходит дважды, он будет давать 2 в столбце, поэтому вам не нужно добавлять * 2, если вы не хотите их умножить два раза раза 2. – user1749431

+0

M не являются бинарными. Они должны содержать только 0 или 1. – marshall

Смежные вопросы