ошибка: выход за границы при поиске идентичных строк в массиве numpy - PullRequest
0 голосов
/ 12 декабря 2018

Учитывая массив с 2300 строками и 44 столбцами, я хотел бы, чтобы мой скрипт проверял наличие одинаковых строк и возвращал массивы этих одинаковых строк с соответствующими индексами в исходной матрице.

Пример:

1 0 0 0 0
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
1 0 0 0 0
1 2 3 4 5

Результат:

equal_arrays1 = [1,2,3]
equal_arrays2 = [0,4]

Мой исходный набор данных состоит из нулевых строк, начиная с 1323 до 1699. Тогда результат должен быть:

equal_array1=[1323,...,1699]

ЧтоЯ до сих пор использовал следующий код:

import numpy as np


input_data = np.load('1IN.npy')
print(np.shape(input_data))

for i in range(len(input_data)):
   for j in range(i+1,len(input_data)):
      if np.array_equal(input_data[i],input_data[j]):
          if np.array_equal(input_data[:,i],input_data[:,j]):
           print (i, j),
      else: break

, но это привело к ошибке:

if np.array_equal(input_data[:,i],input_data[:,j])   :

IndexError: index 1302 is out of bounds for axis 1 with size 44

Я думаю, что это не лучший способ пойти на то, что яхочу достичь, поэтому, если у кого-то есть лучшая альтернатива или может объяснить, что мне нужно исправить, я был бы рад, как я новичок в Python.

1 Ответ

0 голосов
/ 12 декабря 2018

Вы хотите проверять только строки, поэтому снимите проверку на равенство столбцов:

matching_pairs = []

for i in range(len(input_data)):
   for j in range(i+1,len(input_data)):
      if np.array_equal(input_data[i],input_data[j]):
         matching_pairs.append((i, j))
         # break?

print(matching_pairs)

Не знаете, что такое разрыв?Возможно, вы захотите сломать, если вы нашли j, соответствующий вашему i, но вы не хотите разрывать, если не найдете его, иначе вы будете проверять только i против i+1 и ничего больше.

...