无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

NumPy:數(shù)組復(fù)制與視圖

0
分享至

在使用 NumPy 進(jìn)行數(shù)據(jù)處理時,數(shù)組對象不僅可以被讀取或修改,還經(jīng)常需要在不同變量或不同數(shù)組之間進(jìn)行“復(fù)制”。例如:將一個數(shù)組賦值給另一個變量、通過切片獲取數(shù)組的一部分、或顯式創(chuàng)建新的數(shù)組副本。

需要注意的是,這些操作在語法上都表現(xiàn)為“復(fù)制”,但在內(nèi)存層面的行為卻可能完全不同。

NumPy 數(shù)組由數(shù)據(jù)緩沖區(qū)(data buffer)與數(shù)組結(jié)構(gòu)信息(shape、strides、dtype 等)兩部分構(gòu)成。不同“復(fù)制方式”的本質(zhì)差異,在于這兩部分是否被共享。

從內(nèi)存共享的角度來看,NumPy 中數(shù)組之間的關(guān)系可以分為三類:

(1)引用(reference)

(2)視圖(view)

(3)副本(copy)

理解這三種關(guān)系,是掌握 NumPy 數(shù)組行為的重要基礎(chǔ)。

一、數(shù)組引用(Reference)

在 Python 中,如果將一個數(shù)組賦值給另一個變量:

b = a

此時并不會創(chuàng)建新的數(shù)組對象,而只是創(chuàng)建了一個新的變量名指向同一個數(shù)組。

示例:

print(a)

輸出:

 [ 4  5  6]]

該行為本質(zhì)上屬于引用(別名)綁定,而非拷貝。

變量 a 與 b 指向的是同一個數(shù)組對象,因此修改任意一方都會影響另一方。

可以通過 函數(shù)查看對象標(biāo)識:

print(id(b))

兩個變量對應(yīng)的對象標(biāo)識是相同的。

二、數(shù)組視圖(View)

NumPy 提供了一種重要機(jī)制:視圖(view)。

視圖是一個新的數(shù)組對象,它與原數(shù)組共享底層數(shù)據(jù)緩沖區(qū)。即:

? 數(shù)據(jù)共享

? 數(shù)組結(jié)構(gòu)獨立(shape、strides 通常獨立)

因此:

? 修改視圖的數(shù)據(jù),會影響原數(shù)組的數(shù)據(jù)

? 修改視圖的結(jié)構(gòu),通常不影響到原數(shù)組

需要注意的是,雖然視圖通常具有獨立的結(jié)構(gòu)信息,但在某些操作中(如直接修改屬性),仍需謹(jǐn)慎處理結(jié)構(gòu)一致性。

這種設(shè)計的目的在于:

? 提高內(nèi)存利用率

? 避免不必要的數(shù)據(jù)復(fù)制

? 提升大規(guī)模數(shù)組計算效率

1、創(chuàng)建視圖的常用方法

view()

創(chuàng)建當(dāng)前數(shù)組的數(shù)據(jù)視圖,新數(shù)組對象與原數(shù)組共享底層數(shù)據(jù)。

ndarray.view(dtype=None, type=None)

參數(shù)說明:

? dtype:可選,指定新的數(shù)據(jù)類型

? type:可選,指定返回數(shù)組的子類

返回值:

返回一個新的 ndarray 對象(共享數(shù)據(jù))。

示例:

print(a)

輸出:

 [  4   5   6]]

雖然 a 與 b 是不同的數(shù)組對象,但它們共享同一塊數(shù)據(jù)內(nèi)存,因此修改其中一個數(shù)組會影響另一個數(shù)組。

2、返回視圖的常見操作

(1)切片

在 NumPy 中,基本索引(切片)通常返回視圖。

示例:

print(a)

輸出:

 [ 4  5  6]]

數(shù)組 b 是 a 的切片視圖,因此修改 b 的數(shù)據(jù)會影響原數(shù)組。

(2)數(shù)組形狀重構(gòu)時

在不改變數(shù)據(jù)內(nèi)容的情況下,使用 reshape() 重新解釋數(shù)組的形狀。多數(shù)情況下返回視圖。

示例:

print(a)

輸出:

[100   1   2   3   4   5]

reshape() 在大多數(shù)情況下返回視圖,因此 b 與 a 共享數(shù)據(jù)內(nèi)存。修改 b 會反映到原數(shù)組 a 上。

(3)展平數(shù)組時

使用 numpy.ravel() 將數(shù)組展平為一維數(shù)組時,優(yōu)先返回視圖。

示例:

print(a)

輸出:

 [  4   5   6]]

三、數(shù)組副本(Copy)

如果希望獲得一個完全獨立的數(shù)組,則需要創(chuàng)建數(shù)組副本。

1、顯式創(chuàng)建數(shù)組副本

NumPy 提供了 ndarray.copy() 和 numpy.copy() 兩種復(fù)制方法。

ndarray.copy()

創(chuàng)建數(shù)組的完整副本,復(fù)制底層數(shù)據(jù),新數(shù)組與原數(shù)組的數(shù)據(jù)完全獨立。

ndarray.copy(order='C')

參數(shù)說明:

? order:內(nèi)存布局方式(默認(rèn)為 'C')

返回值:

返回一個新的獨立的 ndarray 數(shù)組對象。

示例:

print(a)

輸出:

 [4 5 6]]

數(shù)組 b 是 a 的數(shù)據(jù)副本,因此修改 b 不會影響 a。

numpy.copy()

返回輸入數(shù)組的副本。

numpy.copy(a)

參數(shù)說明:

? a:輸入數(shù)組

返回值:

返回一個新的獨立的 ndarray 數(shù)組對象。

示例:

print(a)

輸出:

 [4 5 6]]

函數(shù) numpy.copy() 與 ndarray.copy() 的行為基本一致。

2、返回副本的常見操作

(1)高級索引時

當(dāng)使用整數(shù)數(shù)組或布爾數(shù)組進(jìn)行高級索引時,返回副本,不共享底層數(shù)據(jù)。

示例:

print(a)

輸出:

 [4 5 6]]

雖然語法類似切片,但因使用整數(shù)數(shù)組索引,返回副本。

需要注意的是,是否返回視圖,并不取決于語法形式,而取決于索引類型。只要使用整數(shù)數(shù)組或布爾數(shù)組,即屬于高級索引,將返回副本。

(2)展平數(shù)組時

使用 ndarray.flatten() 將數(shù)組展平為一維數(shù)組時,始終復(fù)制數(shù)據(jù)。

示例:

print(a)

輸出:

 [4 5 6]]

flatten() 會返回數(shù)組副本,因此修改 b 不會影響原數(shù)組 a。

四、淺拷貝與深拷貝

在 Python 中,對象復(fù)制通常分為淺拷貝(shallow copy)和深拷貝(deep copy)兩種方式,通常通過 實現(xiàn):

copy.deepcopy()

但對于 NumPy 數(shù)組來說,情況略有不同。

由于 NumPy 數(shù)組的數(shù)據(jù)通常存儲在連續(xù)的內(nèi)存塊 中,因此 ndarray.copy() 通常已經(jīng)復(fù)制了數(shù)組數(shù)據(jù),在大多數(shù)情況下,它的行為相當(dāng)于 深拷貝。

例如:

b = a.copy()

此時兩個數(shù)組的數(shù)據(jù)完全獨立。

需要注意的是,如果數(shù)組的元素類型 dtype 為 object,則數(shù)組中存儲的是 Python 對象引用。在這種情況下,ndarray.copy() 只會復(fù)制數(shù)組結(jié)構(gòu),而不會遞歸復(fù)制對象本身,因此仍可能出現(xiàn)淺拷貝行為。

五、判斷是否共享內(nèi)存

NumPy 提供了兩個函數(shù),用于判斷數(shù)組之間是否共享內(nèi)存。

numpy.shares_memory()

判斷兩個數(shù)組是否共享同一塊內(nèi)存。

numpy.shares_memory(a, b)

返回值:

返回布爾值。

numpy.may_share_memory()與其基本一致,但基于保守判斷,判斷兩個數(shù)組是否可能共享內(nèi)存。

示例:

print(np.shares_memory(a, b))

輸出:

True

數(shù)組 b 是 a 的切片視圖,因此兩者共享數(shù)據(jù)內(nèi)存。

如果數(shù)組是通過 copy() 創(chuàng)建:

np.shares_memory(a,c)

輸出:

False

說明兩個數(shù)組的數(shù)據(jù)不共享內(nèi)存,彼此獨立。

小結(jié)

NumPy 中的“復(fù)制”涉及數(shù)據(jù)緩沖區(qū)與數(shù)組結(jié)構(gòu)兩個層面。變量賦值僅創(chuàng)建引用;切片與 view 通常生成共享數(shù)據(jù)的視圖;而 copy() 等操作才會復(fù)制底層數(shù)據(jù)。理解這些機(jī)制,有助于避免隱式數(shù)據(jù)修改,并提升數(shù)組計算的效率。

點贊有美意,贊賞是鼓勵

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點推薦
大規(guī)模清倉!北京本土家居品牌閉店倒計時

大規(guī)模清倉!北京本土家居品牌閉店倒計時

中國商報
2026-06-12 19:44:05
確認(rèn)!巴塞羅那啟動對弗洛倫蒂諾法律行動

確認(rèn)!巴塞羅那啟動對弗洛倫蒂諾法律行動

日常碎碎念啊
2026-06-13 00:18:42
杰拉德曝伊斯坦布爾奇跡更衣室真相

杰拉德曝伊斯坦布爾奇跡更衣室真相

體壇周報
2026-06-12 21:13:42
網(wǎng)傳南通“橋掉下來了”消息不實 當(dāng)?shù)赝▓螅合笛b載混凝土預(yù)制箱梁的半掛車發(fā)生事故

網(wǎng)傳南通“橋掉下來了”消息不實 當(dāng)?shù)赝▓螅合笛b載混凝土預(yù)制箱梁的半掛車發(fā)生事故

紅星新聞
2026-06-12 20:42:09
辭職也難逃追責(zé)!西安女教師配合外籍博主博流量,師德底線失守

辭職也難逃追責(zé)!西安女教師配合外籍博主博流量,師德底線失守

放開他讓wo來
2026-06-12 10:48:34
告訴你一個殘酷的真相:父母存的錢,存的其實是孩子的選擇權(quán)

告訴你一個殘酷的真相:父母存的錢,存的其實是孩子的選擇權(quán)

大熊歡樂坊
2026-06-01 06:24:25
曝格林愿降薪讓步助勇士追詹姆斯

曝格林愿降薪讓步助勇士追詹姆斯

體壇周報
2026-06-13 03:26:12
忠心員工捐髓救老板一命,老板康復(fù)后卻將她辭退,報應(yīng)來得快

忠心員工捐髓救老板一命,老板康復(fù)后卻將她辭退,報應(yīng)來得快

懸案解密檔案
2025-05-14 14:16:08
28歲巔峰退出國家隊?趙繼偉克星宣布退役:男籃反倒成最大受益者

28歲巔峰退出國家隊?趙繼偉克星宣布退役:男籃反倒成最大受益者

籃球快餐車
2026-06-12 05:36:36
世界首富押注的火箭發(fā)動機(jī):折騰了60年,終于變成了流水線產(chǎn)品

世界首富押注的火箭發(fā)動機(jī):折騰了60年,終于變成了流水線產(chǎn)品

平流層散步者
2026-05-27 08:04:47
寶馬也要出“大G”?寶馬全新硬派越野車假想圖曝光,對標(biāo)奔馳G級

寶馬也要出“大G”?寶馬全新硬派越野車假想圖曝光,對標(biāo)奔馳G級

小怪吃美食
2026-06-13 02:55:54
外資控制蒙古銅礦,340萬人淪為性旅游后花園

外資控制蒙古銅礦,340萬人淪為性旅游后花園

清歡百味
2026-06-11 18:45:10
“幾十年的血沒清洗過,您覺得干凈嗎?”

“幾十年的血沒清洗過,您覺得干凈嗎?”

中國新聞周刊
2026-06-11 07:22:08
高考719分奪得全省第一,如今在清華王牌專業(yè)讀大一,成功靠2個字

高考719分奪得全省第一,如今在清華王牌專業(yè)讀大一,成功靠2個字

星娛叨叨社
2026-06-09 14:55:26
值得珍藏:AI產(chǎn)業(yè)鏈+光存電芯+玻璃基板+貴金屬+光通信+能源龍頭

值得珍藏:AI產(chǎn)業(yè)鏈+光存電芯+玻璃基板+貴金屬+光通信+能源龍頭

粵語音樂噴泉
2026-06-11 18:32:26
否決金球先生?皇馬36小時閃簽B席,一場靜默的戰(zhàn)術(shù)革命!

否決金球先生?皇馬36小時閃簽B席,一場靜默的戰(zhàn)術(shù)革命!

落夜足球
2026-06-12 13:49:58
我們等了55年的一句話,終于正式公開了!

我們等了55年的一句話,終于正式公開了!

起喜電影
2026-06-08 10:49:23
老領(lǐng)導(dǎo)落馬前塞給我一個藍(lán)布包,叮囑我辭職回鄉(xiāng)躲五年才安全

老領(lǐng)導(dǎo)落馬前塞給我一個藍(lán)布包,叮囑我辭職回鄉(xiāng)躲五年才安全

曉艾故事匯
2025-12-12 08:10:43
賴昌星的“紅樓”有多厲害?官員坦白:享受全套服務(wù),沒人能把持

賴昌星的“紅樓”有多厲害?官員坦白:享受全套服務(wù),沒人能把持

流史歲月
2026-06-12 11:04:38
646億財務(wù)造假終被抓,兒子投資來源不明,實業(yè)報國六年騙局

646億財務(wù)造假終被抓,兒子投資來源不明,實業(yè)報國六年騙局

玲兒愛唱歌
2026-05-07 05:07:45
2026-06-13 04:15:00
MediaTea
MediaTea
專業(yè)的數(shù)字媒體、新媒體技術(shù)
1888文章數(shù) 80關(guān)注度
往期回顧 全部

科技要聞

剛剛,人類歷史上首位萬億美元富豪誕生!

頭條要聞

美加墨世界杯第二場比賽就現(xiàn)空座 英媒:尷尬

頭條要聞

美加墨世界杯第二場比賽就現(xiàn)空座 英媒:尷尬

體育要聞

歐洲恐韓?肉德維德?

娛樂要聞

一天4個瓜,肖戰(zhàn)熱巴最意外

財經(jīng)要聞

萬億美元順差背后,透露這些信號

汽車要聞

標(biāo)配激光雷達(dá)/雙動力可選 昊鉑S600限時售17.99萬起

態(tài)度原創(chuàng)

時尚
本地
數(shù)碼
健康
藝術(shù)

夏天別總穿一身白或一身黑!試試一半彩色、一半基礎(chǔ)色,高級亮眼

本地新聞

AK劉彰邂逅河北南大港濕地

數(shù)碼要聞

英國監(jiān)管機(jī)構(gòu)警告:亞馬遜、eBay仍在售可能致命的假冒手機(jī)充電器

老人、小孩、孕婦,吃粽子有啥風(fēng)險

藝術(shù)要聞

砸了640億,再賠160億!沙特“The Line”項目徹底涼了?

無障礙瀏覽 進(jìn)入關(guān)懷版