как удалить несколько строк в массиве - PullRequest
0 голосов
/ 07 октября 2019

Я должен удалить последние три строки массива. Это был список, но мне пришлось преобразовать его в массив, чтобы я мог использовать функцию np.delete

Я попробовал функцию np.delete. Он удаляет столбец вместо строки.

Я хочу удалить строку, а не столбец. Когда я изменяю ось на 1., она выдает сообщение об ошибке AxisError: ось 1 выходит за границы массива измерения 1

featureStr2=np.delete(f, slice(3,-1), axis=0). Я хочу удалить последние 3 строки. Массив выглядит так:

1 2 3 4 5

6 7 8 9 20

11 23 54 6 7

2 3 4 5 6 7

1 2 3 4 5

Выходной код -. Я хочу, чтобы выходные данные удалили последние 3 строки.

Ответы [ 4 ]

2 голосов
/ 07 октября 2019

Не удаляйте в numpy. Удаление вызывает перераспределение, которое стоит дорого. Дешевое (правильное) решение - просто создать представление с помощью индексации:

 arr = arr[:-3, ...]
0 голосов
/ 07 октября 2019

Самый простой способ - просто использовать базовое индексирование.

>>>import numpy as np

>>>arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 20], [11, 23, 54, 6, 7], 
[2, 3, 4, 6, 7],[1,2, 3, 4, 5]])

>>>arr = arr[:-3]

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 20]])

np.delete (arr, obj, axis = None) не принимает отрицательные индексы в аргументе объекта

Кроме того, если размер массива велик, указание индекса для каждой строки, столбца или элемента, который необходимо удалить, становится утомительным.

>>>np.delete(arr, [2,3,4], axis=0) 

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 20]])

Но с помощью np.s_ вы можете предоставить фрагмент функции

>>>np.delete(arr, np.s_[2:5], axis=0)

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 20]])

Вы можете задать отрицательную индексацию для np.s_

>>>np.delete(arr, np.s_[-3:], axis=0)

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 20]])
0 голосов
/ 07 октября 2019

Вы можете удалить строки, используя pandas с функцией удаления, индексирования и условия

import numpy as np
import pandas as pd
df = ([1,2,3,4,5], [6,7,8,9,20],[11,23,54,6,7],[2,3,4,5,6,7],[1,2,3,4,5])
series = pd.DataFrame(df)

, используя функцию удаления

series1 = series.drop([2,3,4])
print(series1)

, используя функцию индекса

series1 = series.drop(series.index[2,3,4]
print(series1)
0 голосов
/ 07 октября 2019

Что вам нужно, это Ось и объект:

Синтаксис: numpy.delete(arr, obj, axis=None)

объект: номер строки или номера столбца или индексы

Ось: 0 длястроки и 1 для столбцов

например, я предполагаю, что ваш массив выглядит следующим образом.

a = np.array([[1,2,3,4,5], [2,4,5,6,7], [3,4,5,6,7], [5,7,8,9,1]])
>>> np.delete(a, [2,3], axis=0)
array([[1, 2, 3, 4, 5],
       [2, 4, 5, 6, 7]])

PS на данный момент np.delete не поддерживает отрицательные индексы, в будущем это будет, поэтому я предлагаю вам сначала получить индексы строк, которые вы хотите удалить, а затем передать их в obj в np.delete ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...