numpy刪除單行、刪除單列、刪除多列實(shí)現(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 刪除第三行 返回結(jié)果
[ [1 2 3] [1 2 3] ]
del_col 刪除第二列 返回結(jié)果
[ [1 3] [1 3] [1 3] ]
del_mult_row 刪除第二、三行 返回結(jié)果
[ [1 2 3] ]
Numpy增加和刪除元素
1. delete
numpy.delete(arr, obj, axis=None):
- arr:類數(shù)組。操作對(duì)象
- obj:切片、整數(shù)或者整數(shù)數(shù)組。指示要沿指定軸(由參數(shù)axis指定)刪除的子數(shù)組的索引
- axis:整數(shù)型,可選參數(shù)。指示刪除子數(shù)組(由參數(shù)obj指定)所沿的軸
- axis = None:arr會(huì)先按行展開,然后按照obj,刪除第obj-1(從0開始)位置的數(shù),返回一個(gè)展開的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ù)組。操作對(duì)象
- obj:切片、整數(shù)或者整數(shù)數(shù)組。指示插入values的位置索引(可以是單個(gè)索引也可以是多個(gè)索引),values插入在這些索引之前。
- values:類數(shù)組。插入到arr中的值
如果values的數(shù)據(jù)類型和arr的數(shù)據(jù)類型不同,values會(huì)被自動(dòng)轉(zhuǎn)換為arr的數(shù)據(jù)類型
values的形狀應(yīng)使 arr[…,obj,…] = values 合法
- axis:整數(shù),可選參數(shù)。指示values沿著哪個(gè)軸插入
axis = None:arr會(huì)先被展平,類似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的形狀應(yīng)使 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的形狀應(yīng)使 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ù)組。操作對(duì)象
- values:類數(shù)組 values的形狀必須正確
- axis:整數(shù),可選參數(shù)。指示values沿著哪個(gè)軸添加到arr末尾
- axis = None:arr會(huì)先被展平,類似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ù)組。操作對(duì)象
- new_shape:整數(shù)或整數(shù)序列。調(diào)整大小后的數(shù)組的形狀
如果新數(shù)組比原始數(shù)組大,那么新數(shù)組會(huì)用重復(fù)的原始數(shù)組來填充,這時(shí)會(huì)按照C語(yǔ)言的順序重復(fù)遍歷數(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沒有單獨(dú)考慮各個(gè)軸,因此其不適用于插值/外推。所以,numpy.resize不適用于調(diào)整圖像或數(shù)據(jù)的大小,其中每個(gè)軸代表一個(gè)單獨(dú)的不同實(shí)體。
numpy.resize和ndarray.resize的區(qū)別:
- numpy.resize返回原始數(shù)據(jù)的副本,而ndarray.resize是對(duì)原始數(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(默認(rèn)值)
>>> 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ù)組唯一的元素,返回?cái)?shù)組排序后的唯一的元素
參數(shù):
- ar:類數(shù)組
- return_index:布爾值,可選參數(shù)
- True:返回一個(gè)一維的數(shù)組unique_indices,其中每個(gè)元素表示每個(gè)排序后的唯一值在原始數(shù)組ar中的索引
- return_inverse:布爾值,可選參數(shù)
- True:返回一個(gè)一維的數(shù)組unique_inverse,其中每個(gè)元素表示原始數(shù)組ar中每個(gè)元素在返回的數(shù)組中的索引,用于重建原始數(shù)組
- return_counts:布爾值,可選參數(shù)
- True:返回一個(gè)一維的數(shù)組unique_counts,其中每個(gè)元素表示每個(gè)排序后的唯一值在原始數(shù)組中出現(xiàn)的次數(shù)
- axis:整數(shù)或None,可選參數(shù)
- None:原始數(shù)組ar會(huì)被展平
返回:
- unique:ndarray對(duì)象,排序后的唯一值
- unique_indices:ndarray對(duì)象(長(zhǎng)度和unique一致),return_index為True時(shí)才返回
- unique_inverse:ndarray對(duì)象(長(zhǎng)度和展品后的原始數(shù)組一致),return_inverse為True時(shí)才返回
- unique_counts:ndarray對(duì)象,return_counts為True時(shí)才返回
>>> 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ù)都會(huì)先對(duì)待操作數(shù)組進(jìn)行拷貝,再進(jìn)行操作。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入理解Python虛擬機(jī)之進(jìn)程、線程和協(xié)程區(qū)別詳解
在本篇文章當(dāng)中深入分析在 Python 當(dāng)中 進(jìn)程、線程和協(xié)程的區(qū)別,這三個(gè)概念會(huì)讓人非常迷惑,如果沒有深入了解這三者的實(shí)現(xiàn)原理,只是看一些文字說明,也很難理解,在本篇文章當(dāng)中我們將通過分析部分源代碼來詳細(xì)分析一下這三者根本的區(qū)別是什么,需要的朋友可以參考下2023-10-10Python中chinesecalendar簡(jiǎn)介、安裝、使用方法詳細(xì)講解
這篇文章主要介紹了Python中chinesecalendar簡(jiǎn)介、安裝、使用方法詳細(xì)講解,該庫(kù)是判斷某年某月某一天是不是工作日/節(jié)假日。 支持 2004年 至 2023年,包括 2020年 的春節(jié)延長(zhǎng),需要的朋友可以參考下2023-03-03Python turtle庫(kù)繪制菱形的3種方式小結(jié)
今天小編就為大家分享一篇Python turtle庫(kù)繪制菱形的3種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python?Pygame實(shí)現(xiàn)可控制的煙花游戲
大家好,本篇文章主要講的是Python?Pygame實(shí)現(xiàn)可控制的煙花游戲,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01