日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中的np array函数_numpy中的np.ascontiguousarray()函数

發布時間:2023/12/2 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的np array函数_numpy中的np.ascontiguousarray()函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

"Return a contiguous array (ndim >= 1) in memory (C order)."

用途

ascontiguousarray函數將一個內存不連續存儲的數組轉換為內存連續存儲的數組,使得運行速度更快。

C order vs Fortran order

C order 指的是行優先的順序(Row-major Order),即內存中同行的元素存在一起,

Fortran Order則指的是列優先的順序(Column-major Order),即內存中同列的元素存在一起。

Pascal, C,C++,Python都是行優先存儲的,而Fortran,MatLab是列優先存儲的。

Contiguous array

contiguous array指的是數組在內存中存放的地址也是連續的(注意內存地址實際是一維的)。

2維數組arr = np.arange(12).reshape(3,4)。數組結構如下

在內存里中實際存儲如下:

arr是 C order 的,在內存是行優先的。如果想要向下移動一列,則需要跳過3個塊(例如,從0到4只需要跳過1,2和3)。

如果經過轉置,arr.T沒有了C連續特性,因為內存中元素的地址不變,同一行中的相鄰元素在內存中不是連續的:

這時,arr.T變成了Fortran order,因為相鄰列中的元素在內存中是相鄰存儲的。

從性能上來說,獲取內存中相鄰的地址比不相鄰的地址速度要快很多(從RAM讀取一個數值的時候可以連著一起讀一塊地址中的數值,并且可以保存在Cache中),這意味著對連續數組的操作會快很多。

由于arr是C連續的,因此對其進行行操作比進行列操作速度要快。通常來說

np.sum(arr, axis=1) # 按行求和

會比

np.sum(arr, axis=0) # 按列求和

稍微快些。 同理,在arr.T上,列操作比行操作會快些。

使用 np.ascontiguousarray()

Numpy中,隨機初始化的數組默認都是C連續的。

經過不規則的slice操作,則會改變連續性,可能會變成既不是C連續,也不是Fortran連續的。

可以通過數組的.flags屬性,查看一個數組是C連續還是Fortran連續的

>>> import numpy as np

>>> arr = np.arange(12).reshape(3, 4)

>>> arr.flags

C_CONTIGUOUS : True

F_CONTIGUOUS : False

OWNDATA : False

WRITEABLE : True

ALIGNED : True

WRITEBACKIFCOPY : False

UPDATEIFCOPY : False

從輸出可以看到數組arr是C連續的。 對arr進行按列的slice操作,不改變每行的值,則還是C連續的:

>>> arr

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

>>> arr1 = arr[:2, :]

>>> arr1

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7]])

>>> arr1.flags

C_CONTIGUOUS : True

F_CONTIGUOUS : False

OWNDATA : False

WRITEABLE : True

ALIGNED : True

WRITEBACKIFCOPY : False

UPDATEIFCOPY : False

如果進行在行上的slice,則會改變連續性,成為既不C連續,也不Fortran連續的:

>>> arr1 = arr[:, 1:3]

>>> arr1.flags

C_CONTIGUOUS : False

F_CONTIGUOUS : False

OWNDATA : False

WRITEABLE : True

ALIGNED : True

WRITEBACKIFCOPY : False

UPDATEIFCOPY : False

此時利用ascontiguousarray函數,可以將其變為連續的:

>>> arr2 = np.ascontiguousarray(arr1)

>>> arr2.flags

C_CONTIGUOUS : True

F_CONTIGUOUS : False

OWNDATA : True

WRITEABLE : True

ALIGNED : True

WRITEBACKIFCOPY : False

UPDATEIFCOPY : False

參考

本篇文章由一文多發平臺ArtiPub自動發布

總結

以上是生活随笔為你收集整理的python中的np array函数_numpy中的np.ascontiguousarray()函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。