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
也即默認(rèn)是行序優(yōu)先(row-major order,或者說(shuō)是 C-order),這樣迭代遍歷的目的在于,實(shí)現(xiàn)和內(nèi)存分布格局的一致性,以提升訪問(wèn)的便捷性;
>>> 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
也即對(duì) a 和 a.T 的遍歷執(zhí)行的是同意順序,也即是它們?cè)趦?nèi)存中的實(shí)際存儲(chǔ)順序。
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ù)組中元素的值
默認(rèn)情況下,nditer將視待迭代遍歷的數(shù)組為只讀對(duì)象(read-only),為了在遍歷數(shù)組的同時(shí),實(shí)現(xiàn)對(duì)數(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ù)時(shí)變得更有效率。
>>> 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. 追蹤單個(gè)索引或多重索引(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>
# 索引的編號(hào),以列序優(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)>
補(bǔ)充:詳解 Numpy.ndarray
向量、矩陣 & 多維數(shù)組是數(shù)值計(jì)算中必不可少的工具;通過(guò)對(duì)數(shù)組數(shù)據(jù)進(jìn)行批量處理,避免了對(duì)數(shù)組元素顯式地進(jìn)行循環(huán)操作,這樣做的結(jié)果是可以得到簡(jiǎn)潔、更易維護(hù)的代碼,并且可以使用更底層的庫(kù)來(lái)實(shí)現(xiàn)數(shù)組操作。因此,向量化計(jì)算相比按順序逐元素進(jìn)行計(jì)算要快得多。
在 Python科學(xué)計(jì)算環(huán)境中,Numpy 庫(kù)提供了用于處理數(shù)組的高效數(shù)據(jù)結(jié)構(gòu),且Numpy的核心是使用C語(yǔ)言實(shí)現(xiàn)的,提供了很多處理和處理數(shù)組的函數(shù)。
NumPy支持比Python更多種類的數(shù)字類型,有5種基本數(shù)字類型:
布爾值(bool)
整數(shù)(int)
無(wú)符號(hào)整數(shù)(uint)
浮點(diǎn)(float)
復(fù)數(shù)(complex)
Numpy庫(kù)的核心是表示 同質(zhì)的多維數(shù)據(jù) —— 每個(gè)元素占用相同大小的內(nèi)存塊, 并且所有塊都以完全相同的方式解釋。 如何解釋數(shù)組中的每個(gè)元素由單獨(dú)的數(shù)據(jù)類型對(duì)象指定, 其中一個(gè)對(duì)象與每個(gè)數(shù)組相關(guān)聯(lián)。除了基本類型(整數(shù),浮點(diǎn)數(shù) 等 )之外, 數(shù)據(jù)類型對(duì)象還可以表示數(shù)據(jù)結(jié)構(gòu)。


1、創(chuàng)建 Numpy 數(shù)組
NumPy提供了一個(gè)N維數(shù)組類型,即ndarray, 它描述了相同類型的“項(xiàng)目”集合??梢允褂美鏝個(gè)整數(shù)來(lái)索引項(xiàng)目。從數(shù)組中提取的項(xiàng)( 例如 ,通過(guò)索引)由Python對(duì)象表示, 其類型是在NumPy中構(gòu)建的數(shù)組標(biāo)量類型之一。 數(shù)組標(biāo)量允許容易地操縱更復(fù)雜的數(shù)據(jù)排列。
ndarray 與 array 的區(qū)別
np.array 只是一個(gè)便捷的函數(shù),用來(lái)創(chuàng)建一個(gè)ndarray,它本身不是一個(gè)類。
ndarray 數(shù)組,是用 np.ndarray類的對(duì)象 表示n維數(shù)組對(duì)象
所以ndarray是一個(gè)類對(duì)象,而array是一個(gè)方法。
創(chuàng)建數(shù)組有5種常規(guī)機(jī)制:
從其他Python結(jié)構(gòu)(例如,列表,元組)轉(zhuǎn)換
numpy原生數(shù)組的創(chuàng)建(例如,arange、ones、zeros等)
從磁盤讀取數(shù)組,無(wú)論是標(biāo)準(zhǔn)格式還是自定義格式
通過(guò)使用字符串或緩沖區(qū)從原始字節(jié)創(chuàng)建數(shù)組
使用特殊庫(kù)函數(shù)(例如,random)
1、np.array
一個(gè) ndarray是具有相同類型和大小的項(xiàng)目的(通常是固定大小的)多維容器。 尺寸和數(shù)組中的項(xiàng)目的數(shù)量是由它的shape定義, 它是由N個(gè)非負(fù)整數(shù)組成的tuple(元組),用于指定每個(gè)維度的大小。 數(shù)組中項(xiàng)目的類型由單獨(dú)的data-type object (dtype)指定, 其中一個(gè)與每個(gè)ndarray相關(guān)聯(lián)。
與Python中的其他容器對(duì)象一樣,可以通過(guò)對(duì)數(shù)組進(jìn)行索引或切片(例如,使用N個(gè)整數(shù))以及通過(guò)ndarray的方法和屬性來(lái)訪問(wèn)和修改ndarray的內(nèi)容。
不同的是,ndarrays可以共享相同的數(shù)據(jù), 因此在一個(gè)ndarray中進(jìn)行的更改可能在另一個(gè)中可見。 也就是說(shuō),ndarray可以是另一個(gè)ndarray 的 “view” ,它所指的數(shù)據(jù)由 “base” ndarray處理。 ndarrays也可以是Python擁有的內(nèi)存strings或?qū)崿F(xiàn) buffer 或數(shù)組接口的對(duì)象的視圖。
通過(guò) 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)
一個(gè) ndarray是具有相同類型和大小的項(xiàng)目的多維容器。
尺寸和數(shù)組中的項(xiàng)目的數(shù)量是由它的shape定義, 它是由N個(gè)非負(fù)整數(shù)組成的tuple(元組),用于指定每個(gè)維度的大小。
不同的是,ndarrays可以共享相同的數(shù)據(jù), 因此在一個(gè)ndarray中進(jìn)行的更改可能在另一個(gè)中可見。 也就是說(shuō),ndarray可以是另一個(gè)ndarray 的 “view” ,它所指的數(shù)據(jù)由 “base” ndarray處理。 ndarrays也可以是Python擁有的內(nèi)存strings或?qū)崿F(xiàn) buffer 或數(shù)組接口的對(duì)象的視圖。
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ù)組本身固有的信息。通常,通過(guò)其屬性訪問(wèn)數(shù)組允許您獲取并有時(shí)設(shè)置數(shù)組的內(nèi)部屬性,而無(wú)需創(chuàng)建新數(shù)組。公開的屬性是數(shù)組的核心部分,只有一些屬性可以有意義地重置而無(wú)需創(chuàng)建新數(shù)組。有關(guān)每個(gè)屬性的信息如下。
內(nèi)存布局
以下屬性包含有關(guān)數(shù)組內(nèi)存布局的信息:
方法 描 述 | ndarray.flags | 有關(guān)數(shù)組內(nèi)存布局的信息。 | ndarray.shape | 數(shù)組維度的元組。 | ndarray.strides | 遍歷數(shù)組時(shí)每個(gè)維度中的字節(jié)元組。 | ndarray.ndim | 數(shù)組維數(shù)。 | ndarray.data | Python緩沖區(qū)對(duì)象指向數(shù)組的數(shù)據(jù)的開頭。 | ndarray.size | 數(shù)組中的元素?cái)?shù)。 | ndarray.itemsize | 一個(gè)數(shù)組元素的長(zhǎng)度,以字節(jié)為單位。 | ndarray.nbytes | 數(shù)組元素消耗的總字節(jié)數(shù)。 | ndarray.base | 如果內(nèi)存來(lái)自其他對(duì)象,則為基礎(chǔ)對(duì)象。
數(shù)據(jù)類型
可以在dtype屬性中找到與該數(shù)組關(guān)聯(lián)的數(shù)據(jù)類型對(duì)象 :
方法 | 描 述 | ndarray.dtype | 數(shù)組元素的數(shù)據(jù)類型。
其他屬性
方法 | 描 述 | ndarray.T | 轉(zhuǎn)置數(shù)組。 | ndarray.real | 數(shù)組的真實(shí)部分。 | ndarray.imag | 數(shù)組的虛部。 | ndarray.flat | 數(shù)組上的一維迭代器。 | ndarray.ctypes | 一個(gè)簡(jiǎn)化數(shù)組與ctypes模塊交互的對(duì)象。
3、Numpy 原生數(shù)組 創(chuàng)建 ndarray
方法 | 描 述
| eye(N[, M, k, dtype, order]) | 返回一個(gè)二維數(shù)組,對(duì)角線上有一個(gè),其他地方為零
| identity(n[, dtype]) | 返回標(biāo)識(shí)數(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ù)組,而無(wú)需初始化條目
| 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, …]) | 返回?cái)?shù)以對(duì)數(shù)刻度均勻分布。
| geomspace(start, stop[, num, endpoint, …]) | 返回?cái)?shù)字以對(duì)數(shù)刻度(幾何級(jí)數(shù))均勻分布。
| meshgrid(*xi, **kwargs) | 從坐標(biāo)向量返回坐標(biāo)矩陣。
| mgridnd_grid | 實(shí)例,它返回一個(gè)密集的多維 “meshgrid”
| ogridnd_grid | 實(shí)例,它返回一個(gè)開放的多維 “meshgrid”
2、從現(xiàn)有的數(shù)據(jù)創(chuàng)建
方法 描 述
| array(object[, dtype, copy, order, subok, ndmin]) | 創(chuàng)建一個(gè)數(shù)組
| asarray(a[, dtype, order]) | 將輸入轉(zhuǎn)換為數(shù)組
| asanyarray(a[, dtype, order]) | 將輸入轉(zhuǎn)換為ndarray,但通過(guò)ndarray子類
| ascontiguousarray(a[, dtype]) | 返回內(nèi)存中的連續(xù)數(shù)組(ndim > = 1)(C順序)
| asmatrix(data[, dtype]) | 將輸入解釋為矩陣
| copy(a[, order]) | 返回給定對(duì)象的數(shù)組副本
| frombuffer(buffer[, dtype, count, offset]) | 將緩沖區(qū)解釋為一維數(shù)組
| fromfile(file[, dtype, count, sep, offset]) | 根據(jù)文本或二進(jìn)制文件中的數(shù)據(jù)構(gòu)造一個(gè)數(shù)組
| fromfunction(function, shape, **kwargs) | 通過(guò)在每個(gè)坐標(biāo)上執(zhí)行一個(gè)函數(shù)來(lái)構(gòu)造一個(gè)數(shù)組
| fromiter(iterable, dtype[, count]) | 從可迭代對(duì)象創(chuàng)建一個(gè)新的一維數(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)建矩陣對(duì)象
| tril(m[, k]) | 數(shù)組的下三角。
| triu(m[, k]) | 數(shù)組的上三角。
| vander(x[, N, increasing]) | 生成范德蒙矩陣
| diag(v[, k]) | 提取對(duì)角線或構(gòu)造對(duì)角線數(shù)組。
| diagflat(v[, k]) | 使用展平的輸入作為對(duì)角線創(chuàng)建二維數(shù)組。
| tri(N[, M, k, dtype]) | 在給定對(duì)角線處及以下且在其他位置為零的數(shù)組。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Python+Django搭建自己的blog網(wǎng)站
一直有種想要搭建自己博客系統(tǒng)打沖動(dòng),可惜需要前端知識(shí)較多,而且還要安裝一系列軟件并配置(windows平臺(tái)),后來(lái)偶然發(fā)現(xiàn)了Django這個(gè)神器,恰巧剛學(xué)過(guò)python,于是就又裝了ubuntu(安裝各種軟件配置都方便),折騰了半天,終于搭建起來(lái)自己的第一個(gè)簡(jiǎn)易博客。2018-03-03
使用Python腳本來(lái)獲取Cisco設(shè)備信息的示例
這篇文章主要介紹了編寫Python腳本來(lái)獲取Python腳本來(lái)獲取Cisco設(shè)備信息的教程,文中的示例是獲取一臺(tái)思科交換機(jī)的腳本,需要的朋友可以參考下2015-05-05
pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法
今天小編就為大家分享一篇pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Python&Matlab實(shí)現(xiàn)螞蟻群算法求解最短路徑問(wèn)題的示例
本文主要介紹了Python&Matlab實(shí)現(xiàn)螞蟻群算法求解最短路徑問(wèn)題的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Python簡(jiǎn)單調(diào)用MySQL存儲(chǔ)過(guò)程并獲得返回值的方法
這篇文章主要介紹了Python調(diào)用MySQL存儲(chǔ)過(guò)程并獲得返回值的方法,涉及Python操作MySQL存儲(chǔ)過(guò)程的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
使用Python打造高顏值系統(tǒng)時(shí)間控制器
這篇文章主要介紹了一款基于PyQt5開發(fā)的高顏值系統(tǒng)時(shí)間管理工具,具備現(xiàn)代化Fluent?UI界面和六大核心功能模塊,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2026-03-03
Python的Tornado框架實(shí)現(xiàn)圖片上傳及圖片大小修改功能
Tornado是一個(gè)異步的Python Web開發(fā)框架,同時(shí)也是一個(gè)優(yōu)秀的異步服務(wù)器開發(fā)庫(kù),這里我們將來(lái)講解一下Python的Tornado框架實(shí)現(xiàn)圖片上傳及圖片大小修改功能方面的一些重點(diǎn):2016-06-06
教你用python3根據(jù)關(guān)鍵詞爬取百度百科的內(nèi)容
這篇文章介紹的是利用python3根據(jù)關(guān)鍵詞爬取百度百科的內(nèi)容,注意本文用的是python3版本以及根據(jù)關(guān)鍵詞爬取,爬取也只是單純的爬網(wǎng)頁(yè)信息,有需要的可以參考借鑒。2016-08-08

