網(wǎng)站首頁 編程語言 正文
在Numpy中經(jīng)常使用到的操作由扁平化操作,Numpy提供了兩個(gè)函數(shù)進(jìn)行此操作,他們的功能相同,但在內(nèi)存上有很大的不同.
先來看這兩個(gè)函數(shù)的使用:
from numpy import *
a = arange(12).reshape(3,4)
print(a)
# [[ 0 ?1 ?2 ?3]
# ?[ 4 ?5 ?6 ?7]
# ?[ 8 ?9 10 11]]
print(a.ravel())
# [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]
print(a.flatten())
# [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]
可以看到這兩個(gè)函數(shù)實(shí)現(xiàn)的功能一樣,但我們?cè)谄綍r(shí)使用的時(shí)候flatten()更為合適.在使用過程中flatten()分配了新的內(nèi)存,但ravel()返回的是一個(gè)數(shù)組的視圖.視圖是數(shù)組的引用(說引用不太恰當(dāng),因?yàn)樵瓟?shù)組和ravel()返回后的數(shù)組的地址并不一樣),在使用過程中應(yīng)該注意避免在修改視圖時(shí)影響原本的數(shù)組.這是什么意思咧,我們通過代碼來具體解釋:
from numpy import *
a = arange(12).reshape(3,4)
print(a)
# [[ 0 ?1 ?2 ?3]
# ?[ 4 ?5 ?6 ?7]
# ?[ 8 ?9 10 11]]
# 創(chuàng)建一個(gè)和a相同內(nèi)容的數(shù)組b
b = a.copy()
c = a.ravel()
d = b.flatten()
# 輸出c和d數(shù)組
print(c)
# [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]
print(d)
# [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]
# 可以看到c和d數(shù)組都是扁平化后的數(shù)組,具有相同的內(nèi)容
print(a is c)
# False
print(b is d)
# False
# 可以看到以上a,b,c,d是四個(gè)不同的對(duì)象
# 但因?yàn)閏是a的一種展示方式,雖然他們是不同的對(duì)象,但在修改c的時(shí)候,a中相應(yīng)的數(shù)也改變了
c[1] = 99
d[1] = 99
print(a)
# [[ 0 99 ?2 ?3]
# ?[ 4 ?5 ?6 ?7]
# ?[ 8 ?9 10 11]]
print(b)
# [[ 0 ?1 ?2 ?3]
# ?[ 4 ?5 ?6 ?7]
# ?[ 8 ?9 10 11]]
print(c)
# [ 0 99 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]
print(d)
# [ 0 99 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]
通過以上的分析,在實(shí)際應(yīng)用中應(yīng)盡量使用flatten()函數(shù),這樣避免意外的錯(cuò)誤.
原文鏈接:https://www.cnblogs.com/mzct123/p/8659193.html
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-12-24 C#如何優(yōu)雅的對(duì)WinForm窗體應(yīng)用程序進(jìn)行權(quán)限控制_C#教程
- 2022-02-06 TP6記錄報(bào)錯(cuò)的SQL語句
- 2023-02-01 特定用例下的Combine全面使用詳解_Swift
- 2022-01-15 跨域系列之proxy代理,解決跨域的方法之一
- 2023-04-19 vscode配置ESlint
- 2022-10-20 Flutter實(shí)現(xiàn)矩形取色器的封裝_Android
- 2022-06-07 進(jìn)行數(shù)據(jù)處理的6個(gè)?Python?代碼塊分享_python
- 2022-04-19 C#中Task.ContinueWith連續(xù)任務(wù)使用實(shí)例_C#教程
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支