解決numpy數(shù)組互換兩行及賦值的問題
看代碼吧~
import numpy as np a = np.array([[1,1,1],[2,2,2],[3,3,3], [4,4,4]]) tmp = a[1] a[1] = a[2] a[2] = tmp
tmp只是a[1]的另一個(gè)名字,它并不是將a[1]復(fù)制了之后,就與a[1]無關(guān),或許可理解為一種引用。所以這段代碼的效果并不能如愿互換原始a數(shù)組的第2行和第三行,而是會(huì)將2,3行都變成原來的第三行[3,3,3],像這樣:
array([[1, 1, 1], [3, 3, 3], [3, 3, 3], [4, 4, 4]])
那么如果想互換兩行,應(yīng)該怎么操作呢?
有兩種方法,第一種很簡便:
a[[1,2], :] = a[[2,1], :]
這樣就將數(shù)組a的第2行和第3行互換了?;蛘?,寫得更易理解一點(diǎn),也可以這樣一步一步寫:
tmp = np.copy(a[1]) a[1] = a[2] a[2] = tmp
這兩種寫法都可以將數(shù)組a的第2,3行互換,即可以得到:
array([[1, 1, 1], [3, 3, 3], [2, 2, 2], [4, 4, 4]])
補(bǔ)充:numpy數(shù)組行交換的bug
今日發(fā)現(xiàn)一個(gè)小問題,還好自己發(fā)現(xiàn)了,不然這個(gè)bug不知道要背鍋好久
實(shí)驗(yàn)要求:
交換一個(gè)numpy數(shù)組中的第i行和第j行
上代碼:
import numpy as np arr = np.asarray([[1,2,3], [4,5,6], [7,8,9]]) print(arr) tmp = arr[2] arr[2] = arr[0] arr[0] = tmp print(arr)
打印結(jié)果:
[[1 2 3] [4 5 6] [7 8 9]] [[1 2 3] [4 5 6] [1 2 3]]
這個(gè)結(jié)果打印出來,整個(gè)人傻眼了
為了搞懂為啥是這個(gè)結(jié)果,我打印變量tmp看看
import numpy as np arr = np.asarray([[1,2,3], [4,5,6], [7,8,9]]) print(arr) tmp = arr[2] print(tmp) arr[2] = arr[0] print(tmp) arr[0] = tmp print(arr)
打印結(jié)果:
[[1 2 3] [4 5 6] [7 8 9]] #原始的arr [7 8 9] #第一次打印tmp [1 2 3] #第二次打印tmp [[1 2 3] [4 5 6] [1 2 3]] #交換后的arr
這樣就發(fā)現(xiàn)了問題,這是python的特性,變量tmp不是copy了arr[2]的數(shù)值,而是類似于C中的指針,指在了arr[2]的地址上,當(dāng)執(zhí)行arr[2] = arr[0]后,arr[2]的數(shù)值發(fā)生了變化,所以tmp也發(fā)生了變化
而處理的辦法也很簡單,變量tmp深度copy arr[2]就行,即:tmp = arr[2].copy()
import numpy as np arr = np.asarray([[1,2,3], [4,5,6], [7,8,9]]) print(arr) tmp = arr[2].copy() print(tmp) arr[2] = arr[0] print(tmp) arr[0] = tmp print(arr)
打印結(jié)果:
[[1 2 3] [4 5 6] [7 8 9]] #原始的arr [7 8 9] #第一次打印tmp [7 8 9] #第二次打印tmp [[7 8 9] [4 5 6] [1 2 3]] #交換后的arr
搞定~
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- numpy 聲明空數(shù)組詳解
- Numpy將二維數(shù)組添加到空數(shù)組的實(shí)現(xiàn)
- 在NumPy中創(chuàng)建空數(shù)組/矩陣的方法
- NumPy實(shí)現(xiàn)ndarray多維數(shù)組操作
- 如何在向量化NumPy數(shù)組上進(jìn)行移動(dòng)窗口
- 如何將numpy二維數(shù)組中的np.nan值替換為指定的值
- python 將numpy維度不同的數(shù)組相加相乘操作
- python numpy.power()數(shù)組元素求n次方案例
- Python 用NumPy創(chuàng)建二維數(shù)組的案例
- Numpy ndarray 多維數(shù)組對(duì)象的使用
- 淺談Python numpy創(chuàng)建空數(shù)組的問題
相關(guān)文章
Python函數(shù)命名空間和作用域(Local與Global)
這篇文章主要介紹了Python函數(shù)命名空間和作用域分別介紹Local與Global模式,內(nèi)容詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03Python利用Seaborn繪制多標(biāo)簽的混淆矩陣
混淆矩陣也稱誤差矩陣,是表示精度評(píng)價(jià)的一種標(biāo)準(zhǔn)格式,用n行n列的矩陣形式來表示。本文將利用Seaborn繪制多標(biāo)簽的混淆矩陣,感興趣的可以學(xué)習(xí)一下2022-07-07python matplotlib庫繪制條形圖練習(xí)題
這篇文章主要介紹了python matplotlib庫繪制條形圖練習(xí)題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python基于pygame實(shí)現(xiàn)的font游戲字體(附源碼)
這篇文章主要介紹了Python基于pygame實(shí)現(xiàn)的font游戲字體,涉及Python響應(yīng)鍵盤按鍵動(dòng)態(tài)操作圖片元素的相關(guān)技巧,需要的朋友可以參考下2015-11-11