欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nditer—numpy.ndarray 多維數(shù)組的迭代操作

 更新時間:2021年05月10日 11:08:48   作者:Inside_Zhang  
這篇文章主要介紹了nditer—numpy.ndarray 多維數(shù)組的迭代操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

1. Single array iteration

>>> a = np.arange(6).reshape(2,3)
>>> for x in np.nditer(a):
...     print x,
...
0 1 2 3 4 5

也即默認是行序優(yōu)先(row-major order,或者說是 C-order),這樣迭代遍歷的目的在于,實現(xiàn)和內(nèi)存分布格局的一致性,以提升訪問的便捷性;

>>> for x in np.nditer(a.T):
...     print x,
...
0 1 2 3 4 5
>>> for x in np.nditer(a.T.copy(order='C')):
...     print x,
...
0 3 1 4 2 5

也即對 a 和 a.T 的遍歷執(zhí)行的是同意順序,也即是它們在內(nèi)存中的實際存儲順序。

2. 控制遍歷順序

for x in np.nditer(a, order='F'):Fortran order,也即是列序優(yōu)先;
for x in np.nditer(a.T, order='C'):C order,也即是行序優(yōu)先;

3. 修改數(shù)組中元素的值

默認情況下,nditer將視待迭代遍歷的數(shù)組為只讀對象(read-only),為了在遍歷數(shù)組的同時,實現(xiàn)對數(shù)組元素值得修改,必須指定 read-write 或者 write-only的模式。

>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> for x in np.nditer(a, op_flags=['readwrite']):
...     x[...] = 2 * x
...
>>> a
array([[ 0,  2,  4],
       [ 6,  8, 10]])

4. 使用外部循環(huán)

將一維的最內(nèi)層的循環(huán)轉(zhuǎn)移到外部循環(huán)迭代器,使得 numpy 的矢量化操作在處理更大規(guī)模數(shù)據(jù)時變得更有效率。

>>> a = np.arange(6).reshape(2,3)
>>> for x in np.nditer(a, flags=['external_loop']):
...     print x,
...
[0 1 2 3 4 5]
>>>
>>> for x in np.nditer(a, flags=['external_loop'], order='F'):
...     print x,
...
[0 3] [1 4] [2 5]

5. 追蹤單個索引或多重索引(multi-index)

>>> a = np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> it = np.nditer(a, flags=['f_index'])
>>> while not it.finished:
...     print "%d <%d>" % (it[0], it.index),
...     it.iternext()
...
0 <0> 1 <2> 2 <4> 3 <1> 4 <3> 5 <5>
            # 索引的編號,以列序優(yōu)先
>>> it = np.nditer(a, flags=['multi_index'])
>>> while not it.finished:
...     print "%d <%s>" % (it[0], it.multi_index),
...     it.iternext()
...
0 <(0, 0)> 1 <(0, 1)> 2 <(0, 2)> 3 <(1, 0)> 4 <(1, 1)> 5 <(1, 2)>

補充:詳解 Numpy.ndarray

向量、矩陣 & 多維數(shù)組是數(shù)值計算中必不可少的工具;通過對數(shù)組數(shù)據(jù)進行批量處理,避免了對數(shù)組元素顯式地進行循環(huán)操作,這樣做的結(jié)果是可以得到簡潔、更易維護的代碼,并且可以使用更底層的庫來實現(xiàn)數(shù)組操作。因此,向量化計算相比按順序逐元素進行計算要快得多。

在 Python科學計算環(huán)境中,Numpy 庫提供了用于處理數(shù)組的高效數(shù)據(jù)結(jié)構(gòu),且Numpy的核心是使用C語言實現(xiàn)的,提供了很多處理和處理數(shù)組的函數(shù)。

NumPy支持比Python更多種類的數(shù)字類型,有5種基本數(shù)字類型:

布爾值(bool)

整數(shù)(int)

無符號整數(shù)(uint)

浮點(float)

復數(shù)(complex)

Numpy庫的核心是表示 同質(zhì)的多維數(shù)據(jù) —— 每個元素占用相同大小的內(nèi)存塊, 并且所有塊都以完全相同的方式解釋。 如何解釋數(shù)組中的每個元素由單獨的數(shù)據(jù)類型對象指定, 其中一個對象與每個數(shù)組相關(guān)聯(lián)。除了基本類型(整數(shù),浮點數(shù) 等 )之外, 數(shù)據(jù)類型對象還可以表示數(shù)據(jù)結(jié)構(gòu)。

1、創(chuàng)建 Numpy 數(shù)組

NumPy提供了一個N維數(shù)組類型,即ndarray, 它描述了相同類型的“項目”集合??梢允褂美鏝個整數(shù)來索引項目。從數(shù)組中提取的項( 例如 ,通過索引)由Python對象表示, 其類型是在NumPy中構(gòu)建的數(shù)組標量類型之一。 數(shù)組標量允許容易地操縱更復雜的數(shù)據(jù)排列。

ndarray 與 array 的區(qū)別

np.array 只是一個便捷的函數(shù),用來創(chuàng)建一個ndarray,它本身不是一個類。

ndarray 數(shù)組,是用 np.ndarray類的對象 表示n維數(shù)組對象

所以ndarray是一個類對象,而array是一個方法。

創(chuàng)建數(shù)組有5種常規(guī)機制:

從其他Python結(jié)構(gòu)(例如,列表,元組)轉(zhuǎn)換

numpy原生數(shù)組的創(chuàng)建(例如,arange、ones、zeros等)

從磁盤讀取數(shù)組,無論是標準格式還是自定義格式

通過使用字符串或緩沖區(qū)從原始字節(jié)創(chuàng)建數(shù)組

使用特殊庫函數(shù)(例如,random)

1、np.array

一個 ndarray是具有相同類型和大小的項目的(通常是固定大小的)多維容器。 尺寸和數(shù)組中的項目的數(shù)量是由它的shape定義, 它是由N個非負整數(shù)組成的tuple(元組),用于指定每個維度的大小。 數(shù)組中項目的類型由單獨的data-type object (dtype)指定, 其中一個與每個ndarray相關(guān)聯(lián)。

與Python中的其他容器對象一樣,可以通過對數(shù)組進行索引或切片(例如,使用N個整數(shù))以及通過ndarray的方法和屬性來訪問和修改ndarray的內(nèi)容。

不同的是,ndarrays可以共享相同的數(shù)據(jù), 因此在一個ndarray中進行的更改可能在另一個中可見。 也就是說,ndarray可以是另一個ndarray 的 “view” ,它所指的數(shù)據(jù)由 “base” ndarray處理。 ndarrays也可以是Python擁有的內(nèi)存strings或?qū)崿F(xiàn) buffer 或數(shù)組接口的對象的視圖。

通過 np.array() & np.ndarray() 創(chuàng)建

# Create an array.
np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
np.ndarray(shape, dtype=float, buffer=None, offset=0, strides=None, order=None)

一個 ndarray是具有相同類型和大小的項目的多維容器。

尺寸和數(shù)組中的項目的數(shù)量是由它的shape定義, 它是由N個非負整數(shù)組成的tuple(元組),用于指定每個維度的大小。

不同的是,ndarrays可以共享相同的數(shù)據(jù), 因此在一個ndarray中進行的更改可能在另一個中可見。 也就是說,ndarray可以是另一個ndarray 的 “view” ,它所指的數(shù)據(jù)由 “base” ndarray處理。 ndarrays也可以是Python擁有的內(nèi)存strings或?qū)崿F(xiàn) buffer 或數(shù)組接口的對象的視圖。

Examples:

>>> np.array([1, 2, 3])
array([1, 2, 3])
>>> np.array([1, 2, 3.0])
array([ 1., 2., 3.])
>>> np.array([[1, 2], [3, 4]])
array([[1, 2],
[3, 4]])
>>> np.array([1, 2, 3], ndmin=2)
array([[1, 2, 3]])
>>> np.array([1, 2, 3], dtype=complex)
array([ 1.+0.j, 2.+0.j, 3.+0.j])
>>> x = np.array([(1,2),(3,4)],dtype=[('a','<i4'),('b','<i4')])
>>> x['a']
array([1, 3])
>>> np.array(np.mat('1 2; 3 4'))
array([[1, 2],
[3, 4]])
>>> np.array(np.mat('1 2; 3 4'), subok=True)
matrix([[1, 2],
[3, 4]])
>>> np.ndarray(shape=(2,2), dtype=float, order='F')
array([[ -1.13698227e+002, 4.25087011e-303],
[ 2.88528414e-306, 3.27025015e-309]])  #random
>>> np.ndarray((2,), buffer=np.array([1,2,3]),
offset=np.int_().itemsize,
dtype=int)         # offset = 1 * itemsize, i.e. skip first element
array([2, 3])

2、基本屬性

數(shù)組屬性反映了數(shù)組本身固有的信息。通常,通過其屬性訪問數(shù)組允許您獲取并有時設(shè)置數(shù)組的內(nèi)部屬性,而無需創(chuàng)建新數(shù)組。公開的屬性是數(shù)組的核心部分,只有一些屬性可以有意義地重置而無需創(chuàng)建新數(shù)組。有關(guān)每個屬性的信息如下。

內(nèi)存布局

以下屬性包含有關(guān)數(shù)組內(nèi)存布局的信息:

   方法        描   述
| ndarray.flags  | 有關(guān)數(shù)組內(nèi)存布局的信息。     
| ndarray.shape  | 數(shù)組維度的元組。       
| ndarray.strides  | 遍歷數(shù)組時每個維度中的字節(jié)元組。   
| ndarray.ndim  | 數(shù)組維數(shù)。        
| ndarray.data  | Python緩沖區(qū)對象指向數(shù)組的數(shù)據(jù)的開頭。  
| ndarray.size  | 數(shù)組中的元素數(shù)。       
| ndarray.itemsize | 一個數(shù)組元素的長度,以字節(jié)為單位。   
| ndarray.nbytes  | 數(shù)組元素消耗的總字節(jié)數(shù)。     
| ndarray.base  | 如果內(nèi)存來自其他對象,則為基礎(chǔ)對象。

數(shù)據(jù)類型

可以在dtype屬性中找到與該數(shù)組關(guān)聯(lián)的數(shù)據(jù)類型對象 :

   方法   |  描   述
| ndarray.dtype  | 數(shù)組元素的數(shù)據(jù)類型。     

其他屬性

   方法   |  描   述
| ndarray.T   | 轉(zhuǎn)置數(shù)組。        
| ndarray.real  | 數(shù)組的真實部分。       
| ndarray.imag  | 數(shù)組的虛部。        
| ndarray.flat  | 數(shù)組上的一維迭代器。      
| ndarray.ctypes  | 一個簡化數(shù)組與ctypes模塊交互的對象。  

3、Numpy 原生數(shù)組 創(chuàng)建 ndarray

       方法            |          描   述 
| eye(N[, M, k, dtype, order])       | 返回一個二維數(shù)組,對角線上有一個,其他地方為零
| identity(n[, dtype])         | 返回標識數(shù)組。 
| ones(shape[, dtype, order])       | 返回給定形狀和類型的新數(shù)組,并填充為1
| ones_like(a[, dtype, order, subok, shape])    | 返回形狀與類型與給定數(shù)組相同的數(shù)組。
| zeros(shape[, dtype, order])       | 返回給定形狀和類型的新數(shù)組,并用零填充。
| zeros_like(a[, dtype, order, subok, shape])   | 返回形狀與類型與給定數(shù)組相同的零數(shù)組。 
| full(shape, fill_value[, dtype, order])    | 返回給定形狀和類型的新數(shù)組,并用fill_value填充
| full_like(a, fill_value[, dtype, order, …])   | 返回形狀和類型與給定數(shù)組相同的完整數(shù)組
| empty(shape[, dtype, order])       | 返回給定形狀和類型的新數(shù)組,而無需初始化條目
| empty_like(prototype[, dtype, order, subok, …])  | 返回形狀和類型與給定數(shù)組相同的新數(shù)組

zeros_like()、ones_like()、empty_like() 等帶 _like() 的函數(shù)創(chuàng)建與參數(shù)數(shù)組的形狀及類型相同的數(shù)組。

frombuffer()、fromstring()、fromfile() 等函數(shù)可以從字節(jié)序列或文件創(chuàng)建數(shù)組

4、np.arange

|      方法                       |   描   述 
|  arange([start,] stop[, step,][, dtype])     | 返回給定間隔內(nèi)的均勻間隔的值。
|  linspace(start, stop[, num, endpoint, …])     | 返回指定間隔內(nèi)的等間隔數(shù)字。
|  logspace(start, stop[, num, endpoint, base, …])  |  返回數(shù)以對數(shù)刻度均勻分布。  
|  geomspace(start, stop[, num, endpoint, …])    | 返回數(shù)字以對數(shù)刻度(幾何級數(shù))均勻分布。       
|  meshgrid(*xi, **kwargs)         | 從坐標向量返回坐標矩陣。 
| mgridnd_grid            | 實例,它返回一個密集的多維 “meshgrid”
| ogridnd_grid            | 實例,它返回一個開放的多維 “meshgrid”
        

2、從現(xiàn)有的數(shù)據(jù)創(chuàng)建

      方法            描   述
| array(object[, dtype, copy, order, subok, ndmin]) | 創(chuàng)建一個數(shù)組
| asarray(a[, dtype, order])       | 將輸入轉(zhuǎn)換為數(shù)組
| asanyarray(a[, dtype, order])      | 將輸入轉(zhuǎn)換為ndarray,但通過ndarray子類
| ascontiguousarray(a[, dtype])      | 返回內(nèi)存中的連續(xù)數(shù)組(ndim > = 1)(C順序)
| asmatrix(data[, dtype])        | 將輸入解釋為矩陣
| copy(a[, order])         | 返回給定對象的數(shù)組副本
| frombuffer(buffer[, dtype, count, offset])   | 將緩沖區(qū)解釋為一維數(shù)組
| fromfile(file[, dtype, count, sep, offset])   | 根據(jù)文本或二進制文件中的數(shù)據(jù)構(gòu)造一個數(shù)組
| fromfunction(function, shape, **kwargs)    | 通過在每個坐標上執(zhí)行一個函數(shù)來構(gòu)造一個數(shù)組
| fromiter(iterable, dtype[, count])     | 從可迭代對象創(chuàng)建一個新的一維數(shù)組
| fromstring(string[, dtype, count, sep])    | 從字符串中的文本數(shù)據(jù)初始化的新一維數(shù)組
| loadtxt(fname[, dtype, comments, delimiter, …])  | 從文本文件加載數(shù)據(jù)

3、創(chuàng)建矩陣

    方法                                 |     描 述  
| mat(data[, dtype])           | 將輸入解釋為矩陣
| bmat(obj[, ldict, gdict])         | 從字符串,嵌套序列或數(shù)組構(gòu)建矩陣對象
|  tril(m[, k])           |  數(shù)組的下三角。                               
|  triu(m[, k])           |  數(shù)組的上三角。                               
|  vander(x[, N, increasing])        | 生成范德蒙矩陣        
|  diag(v[, k])           |  提取對角線或構(gòu)造對角線數(shù)組。                 
|  diagflat(v[, k])          |  使用展平的輸入作為對角線創(chuàng)建二維數(shù)組。       
|  tri(N[, M, k, dtype])         |  在給定對角線處及以下且在其他位置為零的數(shù)組。 

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 對Python3.x版本print函數(shù)左右對齊詳解

    對Python3.x版本print函數(shù)左右對齊詳解

    今天小編就為大家分享一篇對Python3.x版本print函數(shù)左右對齊詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python pytorch模型轉(zhuǎn)onnx模型的全過程(多輸入+動態(tài)維度)

    python pytorch模型轉(zhuǎn)onnx模型的全過程(多輸入+動態(tài)維度)

    這篇文章主要介紹了python pytorch模型轉(zhuǎn)onnx模型的全過程(多輸入+動態(tài)維度),本文給大家記錄記錄了pt文件轉(zhuǎn)onnx全過程,簡單的修改即可應(yīng)用,結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-03-03
  • 排序算法之希爾排序法解析

    排序算法之希爾排序法解析

    這篇文章主要介紹了排序算法之希爾排序法解析,希爾排序法(Shell Sort),也稱為縮小增量排序,是一種改進的插入排序算法,它通過將待排序的元素按照一定的間隔分組,對每個分組進行插入排序,逐漸減小間隔直至為1,最后對整個序列進行一次插入排序
    2023-07-07
  • Python中Threading用法詳解

    Python中Threading用法詳解

    本篇文章給大家介紹了Python中Threading的詳細用法,需要的朋友跟著小編一起學習下吧。
    2017-12-12
  • 可能是史上最細的python中import詳解

    可能是史上最細的python中import詳解

    import在python中的意思是用來調(diào)用模塊的,下面這篇文章主要給大家介紹了關(guān)于python中import詳解的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • 使用?OpenCV?開發(fā)虛擬鍵盤的方法

    使用?OpenCV?開發(fā)虛擬鍵盤的方法

    OpenCV是一個強大的圖像處理工具,用于機器學習、圖像處理等的跨平臺開源庫,用于開發(fā)實時計算機視覺應(yīng)用程序,本文重點給大家介紹使用?OpenCV?開發(fā)虛擬鍵盤的方法,感興趣的朋友一起看看吧
    2021-11-11
  • Django import export實現(xiàn)數(shù)據(jù)庫導入導出方式

    Django import export實現(xiàn)數(shù)據(jù)庫導入導出方式

    這篇文章主要介紹了Django import export實現(xiàn)數(shù)據(jù)庫導入導出方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python?kornia計算機視覺庫實現(xiàn)圖像變化

    python?kornia計算機視覺庫實現(xiàn)圖像變化

    這篇文章主要為大家介紹了python?kornia計算機視覺庫實現(xiàn)圖像變化算法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • pycharm重命名文件的方法步驟

    pycharm重命名文件的方法步驟

    在本篇文章中小編給大家分享的是關(guān)于pycharm重命名文件的方法步驟,對此有需要的朋友們可以學習參考下。
    2019-07-07
  • python圖像填充與裁剪/resize的實現(xiàn)代碼

    python圖像填充與裁剪/resize的實現(xiàn)代碼

    這篇文章主要介紹了python圖像填充與裁剪/resize,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08

最新評論