Python 進階 2024-04-29

本文主要介紹一些偶爾“常用”的python語法名扛。

numpy的增維树姨,降維度

在實際開發(fā)中峰髓,會需要將二維矩陣轉(zhuǎn)為多維向量的需求。同時也會有將多維向量轉(zhuǎn)換為二維數(shù)組的需求佩捞。 這里以numpy舉例,說明生降維的基本用法蕾哟。

降維

使用函數(shù) numpy.squeeze(), 刪除無用維度一忱, 但是squeeze()函數(shù)只能用于刪除該維度內(nèi)長度為1的場景,即多余的維度渐苏。

import numpy as np
arr = np.array([[[1, 2, 3], [2, 3, 4]]])
print(arr)

#[[[1 2 3]
#  [2 3 4]]]

print(arr.shape)  # (1, 2, 3)
# 事實上第一個維度我們是不需要的掀潮,因為在該維度上數(shù)組的長度是 1

# 刪除第 1 個維度,我們看到已經(jīng)改變了
print(np.squeeze(arr, 0))

#[[1 2 3]
# [2 3 4]]

升維

對于升維琼富,可以使用numpy.expand_dims( , ), 增加維度仪吧。其中第二個參數(shù)表示要增加哪一個維度。因為數(shù)組長度是固定的鞠眉,在升維后薯鼠,對應維度內(nèi)的數(shù)組長度為1。

import numpy as np
arr = np.array([[1, 2, 3], [2, 3, 4]])
print(arr.shape)  # (2, 3)

print(np.expand_dims(arr, 0).shape)  # (1, 2, 3)
print(np.expand_dims(arr, 1).shape)  # (2, 1, 3)
print(np.expand_dims(arr, 2).shape)  # (2, 3, 1)

arr = np.array([1, 2, 3])
print(np.expand_dims(arr, 0))
# [[1 2 3]]

print(np.expand_dims(arr, 1))
#[[1]
# [2]
 # [3]]

改變維度

常用的改變維度的方法是numpy.reshape(,)械蹋。

import numpy as np

arr = np.array([[1, 2, 3], [2, 3, 4]])
print(arr.shape)  # (2, 3)
arr1 = arr.reshape((2, 1, 1, 3))
print(arr1)
#[[[[1 2 3]]]
# [[[2 3 4]]]]

print(arr1.shape)  # (2, 1, 1, 3)
print(arr1.reshape((2, 3)))  # True
# [[1 2 3]
 # [2 3 4]]

二維矩陣增加行出皇、列

可以使用numpy.append()函數(shù),在矩陣的結尾添加數(shù)據(jù)哗戈。這里添加數(shù)據(jù)的維度要匹配郊艘。

import numpy as np

arr = np.arange(0, 12).reshape(3, 4)
print(arr)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# 在尾部增加一行,這里的維度一定要匹配唯咬,指定 [0, 0, 0, 0] 是不行的纱注,因為 arr 是一個二維數(shù)組
print(np.append(arr, [[0, 0, 0, 0]], axis=0))
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [ 0  0  0  0]]

# 在尾部增加一列,維度同樣要匹配
print(np.append(arr, [[0], [0], [0]], axis=1))
# [[ 0  1  2  3  0]
#  [ 4  5  6  7  0]
#  [ 8  9 10 11  0]]

同樣可以使用numpy.insert()在原有數(shù)組中插入對應元素或 數(shù)組胆胰。insert()函數(shù)可以替代append()函數(shù)的功能;同樣狞贱,insert函數(shù)在使用中需要注意插入數(shù)據(jù)的維度。

import numpy as np

arr = np.arange(0, 12).reshape(3, 4)
print(arr)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# 索引為 1 的位置插入一行蜀涨,值全為 0
print(np.insert(arr, 1, 0, axis=0))
# [[ 0  1  2  3]
#  [ 0  0  0  0]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# 或者我們也可以手動指定
print(np.insert(arr, 1, [0, 0, 0, 0], axis=0))
# [[ 0  1  2  3]
#  [ 0  0  0  0]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# 二維數(shù)組也是可以的
print(np.insert(arr, 1, [[0, 0, 0, 0], [0, 0, 0, 0]], axis=0))

# [[ 0  1  2  3]
#  [ 0  0  0  0]
#  [ 0  0  0  0]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# 插入一列瞎嬉,注意元素個數(shù)要匹配,每一列是 3 個元素
print(np.insert(arr, 1, [[0, 0, 0], [0, 0, 0]], axis=1))
# [[ 0  0  0  1  2  3]
#  [ 4  0  0  5  6  7]
#  [ 8  0  0  9 10 11]]

使用insert替代append實現(xiàn)同樣的效果

import numpy as np

arr = np.arange(0, 12).reshape(3, 4)
print(arr)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# 在尾部增加一行
print(np.insert(arr, arr.shape[0], 0, axis=0))
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [ 0  0  0  0]]

# 在尾部增加一列
print(np.insert(arr, arr.shape[1], 0, axis=1))
# [[ 0  1  2  3  0]
#  [ 4  5  6  7  0]
#  [ 8  9 10 11  0]]

二維矩陣刪除行厚柳、列

刪除函數(shù) numpy.delete(, , axis=0)), 這里能省略axis參數(shù)氧枣。如果不指定具體的axis參數(shù),矩陣將被扁平化處理别垮,然后刪除索引的元素挑胸。

import numpy as np

arr = np.arange(0, 12).reshape(3, 4)
print(arr)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

# 刪除第二行
print(np.delete(arr, [1], axis=0))
"""
[[ 0  1  2  3]
 [ 8  9 10 11]]
"""
# 刪除第一行和第三行
print(np.delete(arr, [0, 2], axis=0))
# [[4 5 6 7]]

# 刪除前兩行,slice(0, 2) 也可以換成 np.s_[0: 2]
print(np.delete(arr, slice(0, 2), axis=0))
# [[ 8  9 10 11]]

#注意宰闰,如果不指定具體的axis參數(shù)茬贵,會將 arr 扁平化處理簿透,然后刪除索引為 1 的元素
print(np.delete(arr, [1])) 
#[ 0  2  3  4  5  6  7  8  9 10 11]

參考:

https://www.cnblogs.com/traditional/p/12629050.html

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市解藻,隨后出現(xiàn)的幾起案子老充,更是在濱河造成了極大的恐慌,老刑警劉巖螟左,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啡浊,死亡現(xiàn)場離奇詭異,居然都是意外死亡胶背,警方通過查閱死者的電腦和手機巷嚣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钳吟,“玉大人廷粒,你說我怎么就攤上這事『烨遥” “怎么了坝茎?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長暇番。 經(jīng)常有香客問我嗤放,道長,這世上最難降的妖魔是什么壁酬? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任次酌,我火速辦了婚禮,結果婚禮上舆乔,老公的妹妹穿的比我還像新娘岳服。我一直安慰自己,他們只是感情好蜕煌,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布派阱。 她就那樣靜靜地躺著诬留,像睡著了一般斜纪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上文兑,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天盒刚,我揣著相機與錄音,去河邊找鬼绿贞。 笑死因块,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的籍铁。 我是一名探鬼主播涡上,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼趾断,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吩愧?” 一聲冷哼從身側(cè)響起芋酌,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雁佳,沒想到半個月后脐帝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡糖权,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年堵腹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片星澳。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡疚顷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出募判,到底是詐尸還是另有隱情荡含,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布届垫,位于F島的核電站释液,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏装处。R本人自食惡果不足惜误债,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妄迁。 院中可真熱鬧寝蹈,春花似錦、人聲如沸登淘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黔州。三九已至耍鬓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間流妻,已是汗流浹背牲蜀。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绅这,地道東北人涣达。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親度苔。 傳聞我的和親對象是個殘疾皇子匆篓,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容