最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

numpy增加維度、刪除維度的方法

 更新時(shí)間:2023年02月20日 11:11:37   作者:古明地盆  
本文主要介紹了numpy增加維度、刪除維度的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

楔子

在 TensorFlow 中,可以給一個(gè) tensor 增加一個(gè)維度、刪除一個(gè)維度,那么在 Numpy 中該怎么呢?

刪除維度、增加維度

先來(lái)看看如何增加一個(gè)維度:

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í)上第一個(gè)維度我們是不需要的,因?yàn)樵谠摼S度上數(shù)組的長(zhǎng)度是 1

# 刪除第 1 個(gè)維度,我們看到已經(jīng)改變了
print(np.squeeze(arr, 0))
"""
[[1 2 3]
 [2 3 4]]
"""

但是注意:只有數(shù)組長(zhǎng)度在該維度上為 1,那么該維度才可以被刪除。如果不是1,那么刪除的話會(huì)報(bào)錯(cuò)。

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

print(arr.shape)  # (1, 2, 3)

try:
    # 刪除第二個(gè)維度,顯然在第二個(gè)維度上數(shù)組的長(zhǎng)度是 2,不是 1
    # 所以它不能被刪除
    print(np.squeeze(arr, 1))
except Exception as e:
    print(e)  # cannot select an axis to squeeze out which has size not equal to one

刪除只能刪除數(shù)組長(zhǎng)度為 1 所對(duì)應(yīng)的維度,同理添加也是添加一個(gè)維度也只是讓數(shù)組在這個(gè)維度上的長(zhǎng)度變成 1,因?yàn)閿?shù)組本來(lái)不存在這個(gè)維度的,但是我們強(qiáng)行加上了一個(gè)維度,那么數(shù)組在這個(gè)維度上的長(zhǎng)度只能是 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]]
"""

以上就實(shí)現(xiàn)了數(shù)組維度的刪除和增加,因?yàn)閿?shù)組的元素是固定的,所以在刪除維度和增加維度時(shí),數(shù)組在該維度上的長(zhǎng)度必須是 1。

另外,變化維度還可以使用 reshape,比如 arr 的維度是 (2, 1, 3),我們把第二個(gè)維度給去掉的話,那么直接 arr.reshape((2, 3)) 即可,增加維度也是同理,只要變化維度前后的元素個(gè)數(shù)不變即可。

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(np.all(arr1.reshape((2, 3)) == arr))  # True

最后,增加維度還有一種做法,但用的不多,舉個(gè)栗子:

import numpy as np


arr = np.array([[1, 2, 3], [2, 3, 4]])
print(arr.shape)  # (2, 3)
# 將維度變成 (2, 1, 3, 1, 1)
arr1 = arr[:, np.newaxis, :, np.newaxis, np.newaxis]
print(arr1.shape)  # (2, 1, 3, 1, 1)
# np.newaxis 等價(jià)于 None
print(arr[:, None, :, None, None].shape)  # (2, 1, 3, 1, 1)
# 使用 : 的部分和之前的維度是對(duì)應(yīng)的,np.newaxis 或者 None 可以理解成 1
# 因此最終得到的數(shù)組的維度就是 (2, 1, 3, 1, 1)

# 再以一維數(shù)組為例
arr = np.array([1, 2, 3])
print(arr)
"""
[1 2 3]
"""
# 得到的數(shù)組的 shape 為 (1, 3)
print(arr[None, :])
"""
[[1 2 3]]
"""
# 得到的數(shù)組的 shape 為 (3, 1)
print(arr[:, None])
"""
[[1]
 [2]
 [3]]
"""

刪除、增加一行或一列

說(shuō)實(shí)話,改變數(shù)組的維度不是特別常見,更常見的是刪除數(shù)組的一行或者一列,舉個(gè)栗子:

# 原始數(shù)組
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
# 我們希望刪除一行
[[ 0  1  2  3]
 [ 8  9 10 11]]
# 或者刪除一列
[[ 0  2  3]
 [ 4  6  7]
 [ 8 10 11]]

這種需求相對(duì)來(lái)說(shuō)更加常見一些,那么應(yīng)該怎么做呢?我們來(lái)看一下。

刪除一行或一列

首先是刪除:

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]]
"""
# 假設(shè)刪除第二行
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=0 換成 axis=1 即可,注意:如果不指定 axis 或者 axis 指定為 None,那么會(huì) np.delete 會(huì)將傳遞的數(shù)組扁平化(變成一維數(shù)組),然后進(jìn)行刪除。舉個(gè)栗子:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
"""
[[1 2 3]
 [4 5 6]]
"""
# 會(huì)將 arr 扁平化處理,然后刪除索引為 1 的元素,因此要注意 axis 參數(shù)
print(np.delete(arr, [1])) 
"""
[1 3 4 5 6]
"""

增加一行或一列

如果想增加一行或一列的話,要怎么做呢?

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] 是不行的,因?yàn)?arr 是一個(gè)二維數(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]]
"""

如果不指定 axis,那么仍然會(huì)將傳遞的數(shù)組扁平化,然后進(jìn)行追加:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
print(np.append(arr, 0))  # [1 2 3 4 5 6 0]
print(np.append(arr, [0, 0]))  # [1 2 3 4 5 6 0 0]
print(np.append(arr, [[0, 0]]))  # [1 2 3 4 5 6 0 0]

append 默認(rèn)是在尾部進(jìn)行追加,并且還要求維度要匹配,不是很方便。所以這里更推薦 insert 函數(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]]
"""
# 索引為 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]]
"""
# 或者我們也可以手動(dòng)指定
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]]
"""
# 插入一列,注意元素個(gè)數(shù)要匹配,每一列是 3 個(gè)元素
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 要方便很多,并且功能也更加強(qiáng)大一些,并且 append 完全可以使用 insert 實(shí)現(xiàn),舉個(gè)栗子:

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]]
"""

最后,如果 insert 不指定維度,那么也是會(huì)先將數(shù)組扁平化,然后在進(jìn)行 insert,舉個(gè)栗子:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(np.insert(arr, 1, [0, 0]))  # [1 0 0 2 3 4 5 6]

總的來(lái)說(shuō)還是比較簡(jiǎn)單的。

到此這篇關(guān)于numpy增加維度、刪除維度的方法的文章就介紹到這了,更多相關(guān)numpy增加維度、刪除維度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python練習(xí)之循環(huán)控制語(yǔ)句 break 與 continue

    python練習(xí)之循環(huán)控制語(yǔ)句 break 與 continue

    這篇文章主要介紹了python循環(huán)控制語(yǔ)句 break 與 continue,break就像是終止按鍵,不管執(zhí)行到哪一步,只要遇到break,不管什么后續(xù)步驟,直接跳出當(dāng)前循環(huán)
    2022-06-06
  • Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用體驗(yàn)

    Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用體驗(yàn)

    這篇文章主要為大家介紹了Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 在交互式環(huán)境中執(zhí)行Python程序過程詳解

    在交互式環(huán)境中執(zhí)行Python程序過程詳解

    這篇文章主要介紹了在交互式環(huán)境中執(zhí)行Python程序過程詳解,運(yùn)行Python腳本程序的方式有多種,目前主要的方式有:交互式環(huán)境運(yùn)行、命令行窗口運(yùn)行、開發(fā)工具上運(yùn)行等,其中在不同的操作平臺(tái)上還互不相同,需要的朋友可以參考下
    2019-07-07
  • Python基于回溯法子集樹模板解決0-1背包問題實(shí)例

    Python基于回溯法子集樹模板解決0-1背包問題實(shí)例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決0-1背包問題,簡(jiǎn)單描述了0-1背包問題并結(jié)合具體實(shí)例形式分析了Python使用回溯法子集樹模板解決0-背包問題的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • Python復(fù)制文件操作實(shí)例詳解

    Python復(fù)制文件操作實(shí)例詳解

    這篇文章主要介紹了Python復(fù)制文件操作的方法,涉及Python針對(duì)文件與目錄的復(fù)制及刪除操作相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • Python實(shí)現(xiàn)合并多張圖片成視頻的示例詳解

    Python實(shí)現(xiàn)合并多張圖片成視頻的示例詳解

    隨著短視頻的興起,越來(lái)越多的人開始用各種形式進(jìn)行視頻制作,本篇博客從程序員的角度為大家解析一下如何通過?Python?合并多個(gè)圖片為一個(gè)視頻,需要的可以參考一下
    2023-02-02
  • Python圖像處理之顏色的定義與使用分析

    Python圖像處理之顏色的定義與使用分析

    這篇文章主要介紹了Python圖像處理之顏色的定義與使用,結(jié)合實(shí)例形式分析了matplotlib模塊中顏色值的相關(guān)使用操作技巧,需要的朋友可以參考下
    2019-01-01
  • 利用Python繪制端午節(jié)祝福動(dòng)畫

    利用Python繪制端午節(jié)祝福動(dòng)畫

    這篇文章主要介紹了如何利用Python繪制一個(gè)端午節(jié)的祝福動(dòng)畫,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2023-06-06
  • Python配置文件處理的方法教程

    Python配置文件處理的方法教程

    這篇文章主要給大家介紹了關(guān)于Python配置文件處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python實(shí)現(xiàn)圖數(shù)據(jù)處理的完整指南

    Python實(shí)現(xiàn)圖數(shù)據(jù)處理的完整指南

    圖是一種非常重要的數(shù)據(jù)結(jié)構(gòu),在Python中,我們可以使用鄰接矩陣來(lái)表示圖,這篇文章主要為大家介紹了Python實(shí)現(xiàn)圖數(shù)據(jù)處理的相關(guān)知識(shí),需要的可以參考下
    2024-04-04

最新評(píng)論

清流县| 定结县| 宽城| 冕宁县| 怀化市| 远安县| 定兴县| 海阳市| 灵台县| 楚雄市| 上栗县| 通州区| 漯河市| 舞阳县| 桃园市| 阿巴嘎旗| 衢州市| 赞皇县| 固始县| 大名县| 修文县| 华阴市| 松原市| 锡林浩特市| 保亭| 依安县| 普安县| 黑山县| 襄城县| 日土县| 徐水县| 巍山| 周至县| 兰考县| 乌什县| 策勒县| 长乐市| 海安县| 富锦市| 电白县| 辰溪县|