Эффективное удаление целого числа из матрицы построчных перестановок целых чиселPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Эффективное удаление целого числа из матрицы построчных перестановок целых чисел

Сообщение Anonymous »

У меня есть матрица размера n x n, где каждая строка представляет собой перестановку целых чисел от 1 до n.
Для данного целого числа k в {1,2,...,n , моя цель — найти k в каждой строке и удалить его, чтобы оставшиеся элементы в каждой строке оставались в исходном порядке.
Для конкретности , предположим, что X является этой матрицей и n = 5.

Код: Выделить всё

import numpy as np
X= np.array([
[4, 3, 5, 1, 2],
[5, 3, 2, 1, 4],
[3, 2, 4, 1, 5],
[2, 4, 3, 5, 1],
[3, 5, 2, 1, 4]
])
Для k = 1 я хочу, чтобы результат был следующим:

Код: Выделить всё

X = np.array([
[4, 3, 5, 2],
[5, 3, 2, 4],
[3, 2, 4, 5],
[2, 4, 3, 5],
[3, 5, 2, 4]
])
Есть ли способ удалить k, который хорошо масштабируется с помощью m?
В настоящее время я создаю маску, которая идентифицирует записи в каждой строке X, которые не равны k. Таким образом, маска дает мне логический массив, который имеет значение True для элементов в строке i, которые не равны k.
Далее я применяю маску к каждой строке: я перебираю каждую строку и использую X[mask] для фильтрации значения k в каждой строке. Результат для каждой строки затем присваивается соответствующей строке в Xnew.

Код: Выделить всё

m = 5
n = m
X = np.array([np.random.permutation(np.arange(1, n + 1)) for _ in range(m)])
k = 1
mask = X != k
Xnew = np.zeros([n,m-1])
for i in range(m):
Xnew[i]=X[i][mask[i]]

Этот подход работает для небольших матриц, но может плохо масштабироваться с более крупными матрицами из-за цикла по каждой строке. Мне интересно, есть ли более эффективный способ добиться этого?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -of-intege
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»