Удалить строку из 2D массива python (IndexError) - PullRequest
2 голосов
/ 04 апреля 2020

Я получил один 2-D массив

data = [[1,2,3...], [4,5,6...], [7,8,9...], ...]

и еще один 1-D массив, который содержит значение MINIMUM каждого подмассива сверху:

minima= [1, 4, 7, ....]. Следовательно, len(minima) = len(data).

Теперь я хочу установить пороговое значение, скажем threshold = 7, и хочу удалить каждый подмассив data с минимумом ниже этого порога. Итак, я попробовал следующее:

threshold = 7
for i in range(len(minima)):
    if minima[i] < threshold:
        data = np.delete(data, i, 1)

, но это дает мне IndexError: IndexError: index 225 выходит за пределы для оси 1 с размером 225

Я думаю, что это связано с чем-то Ось и Al oop не лучший подход, но мой опыт очень ограничен. Ценю вашу помощь!

1 Ответ

2 голосов
/ 04 апреля 2020

Причина, по которой это не удастся, заключается в том, что если вы удалите строку, то количество строк будет уменьшаться, но i будет увеличиваться до тех пор, пока не будет достигнуто " old " количество строк.

Но в любом случае использование al oop для каждого удаления одной строки не очень эффективно . Numpy может повысить эффективность, выполняя операции в массовых . Итерируя, ваш алгоритм, вероятно, будет не намного быстрее, чем простая Python программа без использования numpy.

. Вы можете просто отфильтровать массив с помощью:

data2 = data[<b>minima >= threshold</b>]

Обратите внимание, что вам не нужно рассчитывать построчный минимум самостоятельно, вы можете рассчитать это с помощью:

data2 = data[<b>data.min(axis=1)</b> >= threshold]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...