numpy刪除單行、刪除單列、刪除多列實現(xiàn)方式
numpy刪除單行、刪除單列、刪除多列
import numpy as np
刪除元素
通過index刪除單行、刪除單列、刪除多行
def delFun():
"""
刪除
:return:
"""
source = np.array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
# 刪除第三行
del_arr_1 = source.copy()
del_row = np.delete(del_arr_1, 2, axis=0)
# 刪除第二列
del_arr_2 = source.copy()
del_col = np.delete(del_arr_2, 1, axis=1)
# 刪除第二、三行
del_arr_3 = source.copy()
del_mult_row = np.delete(del_arr_3, (1, 2), axis=0)
print(del_row)
print(del_col)
print(del_mult_row)
原始數(shù)據(jù)
[ [1 2 3] [1 2 3] [1 2 3] ]
del_row 刪除第三行 返回結果
[ [1 2 3] [1 2 3] ]
del_col 刪除第二列 返回結果
[ [1 3] [1 3] [1 3] ]
del_mult_row 刪除第二、三行 返回結果
[ [1 2 3] ]
Numpy增加和刪除元素
1. delete
numpy.delete(arr, obj, axis=None):
- arr:類數(shù)組。操作對象
- obj:切片、整數(shù)或者整數(shù)數(shù)組。指示要沿指定軸(由參數(shù)axis指定)刪除的子數(shù)組的索引
- axis:整數(shù)型,可選參數(shù)。指示刪除子數(shù)組(由參數(shù)obj指定)所沿的軸
- axis = None:arr會先按行展開,然后按照obj,刪除第obj-1(從0開始)位置的數(shù),返回一個展開的arr
>>> 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]])
# obj參數(shù)
>>> np.delete(arr,1,1)
array([[ 1, 3, 4],
[ 5, 7, 8],
[ 9, 11, 12]])
>>> np.delete(arr,[1,2],axis=1)
array([[ 1, 4],
[ 5, 8],
[ 9, 12]])
# axis參數(shù)
>>> np.delete(arr,1,0)
array([[ 1, 2, 3, 4],
[ 9, 10, 11, 12]])
>>> np.delete(arr,1)
array([ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
2. insert
numpy.insert(arr, obj, values, axis=None):沿著給定的軸(axis),在給定的索引(obj)之前插入值
- arr:類數(shù)組。操作對象
- obj:切片、整數(shù)或者整數(shù)數(shù)組。指示插入values的位置索引(可以是單個索引也可以是多個索引),values插入在這些索引之前。
- values:類數(shù)組。插入到arr中的值
如果values的數(shù)據(jù)類型和arr的數(shù)據(jù)類型不同,values會被自動轉換為arr的數(shù)據(jù)類型
values的形狀應使 arr[…,obj,…] = values 合法
- axis:整數(shù),可選參數(shù)。指示values沿著哪個軸插入
axis = None:arr會先被展平,類似numpy.delete函數(shù)
>>> 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]])
# obj參數(shù)
>>> np.insert(arr,1,0,axis=1)
array([[ 1, 0, 2, 3, 4],
[ 5, 0, 6, 7, 8],
[ 9, 0, 10, 11, 12]])
>>> np.insert(arr,1,[1,2,3],axis=1) # values的形狀應使 arr[...,obj,...] = values 合法
array([[ 1, 1, 2, 3, 4],
[ 5, 2, 6, 7, 8],
[ 9, 3, 10, 11, 12]])
>>> np.insert(arr,[1,2],np.array([[1,2],[3,4],[5,6]]),axis=1) # values的形狀應使 arr[...,obj,...] = values 合法
array([[ 1, 1, 2, 2, 3, 4],
[ 5, 3, 6, 4, 7, 8],
[ 9, 5, 10, 6, 11, 12]])
>>> np.insert(arr,[1],[1,2,3],axis=1)
array([[ 1, 1, 2, 3, 2, 3, 4],
[ 5, 1, 2, 3, 6, 7, 8],
[ 9, 1, 2, 3, 10, 11, 12]])
# values參數(shù)
>>> np.insert(arr,1,[1.5,2,True],axis=1)
array([[ 1, 1, 2, 3, 4],
[ 5, 2, 6, 7, 8],
[ 9, 1, 10, 11, 12]])
# axis參數(shù)
>>> np.insert(arr,1,0,axis=0)
array([[ 1, 2, 3, 4],
[ 0, 0, 0, 0],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> np.insert(arr,1,0)
array([ 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
注釋:特別注意numpy.insert(obj = some_integer)與numpy.insert(obj = [some_integer])的區(qū)別。
3. append
numpy.append(arr, values, axis=None):添加值到數(shù)組的末尾
- arr:類數(shù)組。操作對象
- values:類數(shù)組 values的形狀必須正確
- axis:整數(shù),可選參數(shù)。指示values沿著哪個軸添加到arr末尾
- axis = None:arr會先被展平,類似numpy.delete和numpy.insert函數(shù)
>>> 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]])
# values參數(shù)
>>> np.append(arr,[13,14,15,16],axis=0)
ValueError: all the input arrays must have same number of dimensions, but the array
at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)
>>> np.append(arr,np.array([[13,14,15,16]]),axis=0)
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
>>> np.append(arr,[5,9,13],axis=1)
ValueError: all the input arrays must have same number of dimensions, but the array
at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)
>>> np.append(arr,np.array([[5],[9],[13]]),axis=1)
array([[ 1, 2, 3, 4, 5],
[ 5, 6, 7, 8, 9],
[ 9, 10, 11, 12, 13]])
# axis參數(shù)
>>> np.append(arr,[13,14,15,16])
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
注釋: 特別注意values參數(shù)的形狀。
4. resize
numpy.resize(a, new_shape):返回具有指定形狀的新數(shù)組
- a:類數(shù)組。操作對象
- new_shape:整數(shù)或整數(shù)序列。調整大小后的數(shù)組的形狀
如果新數(shù)組比原始數(shù)組大,那么新數(shù)組會用重復的原始數(shù)組來填充,這時會按照C語言的順序重復遍歷數(shù)組
>>> 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.resize(arr,(4,3))
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
>>> np.resize(arr,(4,4))
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[ 1, 2, 3, 4]])
>>> np.resize(arr,(3,5))
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 1, 2, 3]])
>>> np.resize(arr,(3,3))
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
注釋:
numpy.resize沒有單獨考慮各個軸,因此其不適用于插值/外推。所以,numpy.resize不適用于調整圖像或數(shù)據(jù)的大小,其中每個軸代表一個單獨的不同實體。
numpy.resize和ndarray.resize的區(qū)別:
- numpy.resize返回原始數(shù)據(jù)的副本,而ndarray.resize是對原始數(shù)據(jù)原地(in-place)修改
- numpy.resize是用原始數(shù)組來填充,而ndarray是用0來填充
>>> 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.resize(arr,[3,5])
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 1, 2, 3]])
>>> arr
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> arr.resize(3,5,refcheck=False)
>>> arr
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 0, 0, 0]])```
numpy.resize和numpy.reshape的區(qū)別:
- numpy.resize中新數(shù)組的形狀可以和原始數(shù)組不兼容,而numpy.reshape中新數(shù)組的形狀必須和原始數(shù)組兼容
- numpy.resize返回的是原始數(shù)組的副本,而numpy.reshape返回的是原始數(shù)組的視圖
>>> 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]])
>>> id(arr)
2040077636592
>>> arr.ctypes.data
2039348516176
>>> arr_reshape = np.reshape(arr,(4,3))
>>> arr_reshape
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
>>> id(arr_reshape)
2040077636832
>>> arr_reshape.ctypes.data
2039348516176
>>> arr_resize = np.resize(arr,(4,3))
>>> arr_resize
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
>>> id(arr_resize)
2040077636752
>>> arr_resize.ctypes.data
2039348513616
>>> arr[0][0] = 0
>>> arr
array([[ 0, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> arr_reshape
array([[ 0, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
>>> arr_resize
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
5. trim_zeros
numpy.trim_zeros(filt, trim=‘fb’):修剪一維數(shù)組或序列開頭和/或尾部的0
filt:一維數(shù)組或序列
trim:字符串,可選參數(shù)
- ‘f’:修剪一維數(shù)組或序列開頭的0
- ‘b’:修剪一維數(shù)組或序列尾部的0
- ‘fb’:修剪一維數(shù)組或序列開頭和尾部的0(默認值)
>>> arr = np.array([0, 0, 0, 1, 2, 3, 0, 2, 1, 0, 0]) >>> arr array([0, 0, 0, 1, 2, 3, 0, 2, 1, 0, 0]) >>> np.trim_zeros(arr) array([1, 2, 3, 0, 2, 1]) >>> np.trim_zeros(arr,trim='f') array([1, 2, 3, 0, 2, 1, 0, 0]) >>> np.trim_zeros(arr,trim='b') array([0, 0, 0, 1, 2, 3, 0, 2, 1]) >>> list1 = [0, 0, 0, 1, 2, 3, 0, 2, 1, 0, 0] >>> np.trim_zeros(list1) [1, 2, 3, 0, 2, 1] >>> np.trim_zeros(list1,trim='f') [1, 2, 3, 0, 2, 1, 0, 0] >>> np.trim_zeros(list1,trim='b') [0, 0, 0, 1, 2, 3, 0, 2, 1]
6. unique
numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None):查找數(shù)組唯一的元素,返回數(shù)組排序后的唯一的元素
參數(shù):
- ar:類數(shù)組
- return_index:布爾值,可選參數(shù)
- True:返回一個一維的數(shù)組unique_indices,其中每個元素表示每個排序后的唯一值在原始數(shù)組ar中的索引
- return_inverse:布爾值,可選參數(shù)
- True:返回一個一維的數(shù)組unique_inverse,其中每個元素表示原始數(shù)組ar中每個元素在返回的數(shù)組中的索引,用于重建原始數(shù)組
- return_counts:布爾值,可選參數(shù)
- True:返回一個一維的數(shù)組unique_counts,其中每個元素表示每個排序后的唯一值在原始數(shù)組中出現(xiàn)的次數(shù)
- axis:整數(shù)或None,可選參數(shù)
- None:原始數(shù)組ar會被展平
返回:
- unique:ndarray對象,排序后的唯一值
- unique_indices:ndarray對象(長度和unique一致),return_index為True時才返回
- unique_inverse:ndarray對象(長度和展品后的原始數(shù)組一致),return_inverse為True時才返回
- unique_counts:ndarray對象,return_counts為True時才返回
>>> arr = np.array([[1,2,3,4], [5,6,7,8], [5,6,7,8], [9,10,11,12]])
>>> arr
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> arr_unique, arr_index, arr_inverse, arr_counts = np.unique(arr, return_index=True, return_inverse=True, return_counts=True)
>>> arr_unique
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
>>> arr_index
array([ 0, 1, 2, 3, 4, 5, 6, 7, 12, 13, 14, 15], dtype=int64)
>>> arr_inverse
array([ 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8, 9, 10, 11],
dtype=int64)
>>> arr_counts
array([1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1], dtype=int64)
# unique = arr.flatten()[index]
>>> arr.flatten()[arr_index]
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
# arr = unique[inverse].reshape(arr.shape)
>>> arr_unique[arr_inverse].reshape(arr.shape)
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> arr_unique_0, arr_index_0, arr_inverse_0, arr_counts_0 = np.unique(arr, return_index=True, return_inverse=True, return_counts=True,axis=0)
>>> arr_unique_0
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> arr_index_0
array([0, 1, 3], dtype=int64)
>>> arr_inverse_0
array([0, 1, 1, 2], dtype=int64)
>>> arr_counts_0
array([1, 2, 1], dtype=int64)
>>> arr_unique_1, arr_index_1, arr_inverse_1, arr_counts_1 = np.unique(arr, return_index=True, return_inverse=True, return_counts=True,axis=1)
>>> arr_unique_1
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> arr_index_1
array([0, 1, 2, 3], dtype=int64)
>>> arr_inverse_1
array([0, 1, 2, 3], dtype=int64)
>>> arr_counts_1
array([1, 1, 1, 1], dtype=int64)
注釋: 本篇中所有函數(shù)都會先對待操作數(shù)組進行拷貝,再進行操作。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python使用Joblib模塊實現(xiàn)加快任務處理速度
在Python編程中,處理大規(guī)模數(shù)據(jù)或者進行復雜的計算任務時,通常需要考慮如何提高程序的運行效率,本文主要介紹了如何使用Joblib模塊來加快任務處理速度,需要的可以參考下2024-03-03
Python打包方法之setup.py與pyproject.toml的全面對比與實戰(zhàn)
在 Python 開發(fā)中,創(chuàng)建可安裝的包是分享代碼的重要方式,本文將深入解析兩種主流打包方法——setup.py 和 pyproject.toml,并通過一個實際項目示例,展示如何使用現(xiàn)代的 pyproject.toml 方法構建、測試和發(fā)布 Python 包,需要的朋友可以參考下2025-05-05
使用Python和PyQt5實現(xiàn)全方面系統(tǒng)資源監(jiān)控
這篇文章主要介紹了一個基于PyQt5和psutil庫開發(fā)的系統(tǒng)資源監(jiān)控工具,該工具不僅具有強大的系統(tǒng)監(jiān)控功能,還采用了電影中經典的數(shù)字雨視覺效果作為背景,感興趣的可以了解下2025-06-06
淺談python 線程池threadpool之實現(xiàn)
這篇文章主要介紹了淺談python 線程池threadpool之實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11

