Hướng dẫn remove element from array python numpy - xóa phần tử khỏi mảng python numpy

Không phải là một người numpy, tôi đã bắn:

>>> import numpy as np
>>> import itertools
>>> 
>>> a = np.array([1,2,3,4,5,6,7,8,9])
>>> index=[2,3,6]
>>> a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))
>>> a
array([1, 2, 5, 6, 8, 9])

Theo các bài kiểm tra của tôi, điều này vượt trội so với numpy.delete(). Tôi không biết tại sao đó là trường hợp, có thể là do kích thước nhỏ của mảng ban đầu?

python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))"
100000 loops, best of 3: 12.9 usec per loop

python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "np.delete(a, index)"
10000 loops, best of 3: 108 usec per loop

Đó là một sự khác biệt khá quan trọng (theo hướng ngược lại với những gì tôi đang mong đợi), có ai có ý tưởng tại sao điều này sẽ xảy ra không?

Thậm chí kỳ lạ hơn, việc vượt qua numpy.delete() Một danh sách thực hiện tồi tệ hơn việc lặp lại trong danh sách và đưa ra các chỉ số đơn.

python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "for i in index:" "    np.delete(a, i)"
10000 loops, best of 3: 33.8 usec per loop

Chỉnh sửa: Nó dường như liên quan đến kích thước của mảng. Với các mảng lớn, numpy.delete() nhanh hơn đáng kể.

python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array(list(range(10000)))" -s "index=[i for i in range(10000) if i % 2 == 0]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))"
10 loops, best of 3: 200 msec per loop

python -m timeit -s "import numpy as np" -s "a = np.array(list(range(10000)))" -s "index=[i for i in range(10000) if i % 2 == 0]" "np.delete(a, index)"
1000 loops, best of 3: 1.68 msec per loop

Rõ ràng, đây là tất cả đều không liên quan, vì bạn nên luôn luôn rõ ràng và tránh phát minh lại bánh xe, nhưng tôi thấy nó hơi thú vị, vì vậy tôi nghĩ rằng tôi sẽ để nó ở đây.

numpy.delete (mảng, obj, axis = none) [nguồn]#delete(arr, obj, axis=None)[source]#

Trả về một mảng mới với các mảng phụ dọc theo một trục bị xóa. Đối với một mảng một chiều, điều này trả về các mục đó không được trả về bởi ARR [OBJ].

Parametersarrarray_likearrarray_like

Mảng đầu vào.

objslice, int hoặc mảng intsslice, int or array of ints

Chỉ ra các chỉ số của các mảng con để loại bỏ dọc theo trục được chỉ định.

Đã thay đổi trong phiên bản 1.19.0: Các chỉ số Boolean hiện được coi là mặt nạ của các phần tử để loại bỏ, thay vì được đúc vào số nguyên 0 và 1.Boolean indices are now treated as a mask of elements to remove, rather than being cast to the integers 0 and 1.

Trục, tùy chọnint, optional

Trục dọc theo đó để xóa Subarray được xác định bởi OBJ. Nếu trục là không, OBJ được áp dụng cho mảng phẳng.

ReturnSoutNDarrayoutndarray

Một bản sao của mảng với các yếu tố được chỉ định bởi obj đã bị xóa. Lưu ý rằng

python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))"
100000 loops, best of 3: 12.9 usec per loop

python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "np.delete(a, index)"
10000 loops, best of 3: 108 usec per loop
0 không xảy ra tại chỗ. Nếu trục là không, ra là một mảng phẳng.

Xem thêm

python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))"
100000 loops, best of 3: 12.9 usec per loop

python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "np.delete(a, index)"
10000 loops, best of 3: 108 usec per loop
1

Chèn các phần tử vào một mảng.

python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))"
100000 loops, best of 3: 12.9 usec per loop

python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "np.delete(a, index)"
10000 loops, best of 3: 108 usec per loop
2

Phụ lục các phần tử ở cuối một mảng.

Ghi chú

Thường thì tốt hơn là sử dụng mặt nạ Boolean. Ví dụ:

>>> arr = np.arange(12) + 1
>>> mask = np.ones(len(arr), dtype=bool)
>>> mask[[0,2,4]] = False
>>> result = arr[mask,...]

Tương đương với

python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "a = np.array(list(itertools.compress(a, [i not in index for i in range(len(a))])))"
100000 loops, best of 3: 12.9 usec per loop

python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "np.delete(a, index)"
10000 loops, best of 3: 108 usec per loop
3, nhưng cho phép sử dụng thêm mặt nạ.

Ví dụ

>>> arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
>>> arr
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
>>> np.delete(arr, 1, 0)
array([[ 1,  2,  3,  4],
       [ 9, 10, 11, 12]])

>>> np.delete(arr, np.s_[::2], 1)
array([[ 2,  4],
       [ 6,  8],
       [10, 12]])
>>> np.delete(arr, [1,3,5], None)
array([ 1,  3,  5,  7,  8,  9, 10, 11, 12])

Làm cách nào để loại bỏ một phần tử khỏi một mảng trong Python?

Bạn có thể sử dụng phương thức pop () để loại bỏ một phần tử khỏi mảng.use the pop() method to remove an element from the array.

Làm cách nào để loại bỏ một phần tử trong mảng?

Hàm pop (): Phương thức này được sử dụng để loại bỏ các phần tử từ cuối một mảng.Hàm shift (): Phương thức này được sử dụng để loại bỏ các phần tử từ đầu một mảng.Hàm splice (): Phương pháp này được sử dụng để loại bỏ các phần tử khỏi chỉ số cụ thể của một mảng.: This method is use to remove elements from the end of an array. shift() function: This method is use to remove elements from the start of an array. splice() function: This method is use to remove elements from the specific index of an array.

Làm thế nào để bạn loại bỏ một đối tượng khỏi một mảng trong Python?

Để loại bỏ một phần tử khỏi một mảng, các nhà phát triển cũng có thể sử dụng phương thức pop () của mảng.Nếu chúng ta chỉ cần sử dụng pop () mà không cần truyền bất kỳ tham số nào, thì nó sẽ loại bỏ phần tử khỏi chỉ mục cuối cùng (n th).Nhưng nếu chúng tôi chỉ định giá trị chỉ mục của mảng, nó sẽ loại bỏ phần tử cụ thể đó khỏi mảng.use the pop() method of the array. If we simply use pop() without passing any parameter, then it will remove the element from the last (n th) index. But if we specify the index value of the array, it will remove that particular element from the array.