08.Numpy数组迭代
一般迭代
NumPy包包含一個(gè)迭代器對(duì)象numpy.nditer。 它是一個(gè)有效的多維迭代器對(duì)象,可以用于在數(shù)組上進(jìn)行迭代。 數(shù)組的每個(gè)元素可使用 Python的標(biāo)準(zhǔn)Iterator接口來(lái)訪問(wèn)。
使用arange()函數(shù)創(chuàng)建一個(gè) 3X4 數(shù)組,并使用nditer對(duì)它進(jìn)行迭代。
示例 1
>>> a = np.arange(0, 60, 5) >>> a.shape = 3, 4 array([[ 0, 5, 10, 15],[20, 25, 30, 35],[40, 45, 50, 55]]) >>> for x in np.nditer(a): ... print(x) ... ... 0 5 10 15 20 25 30 35 40 45 50 55 >>>示例 2
迭代的順序匹配數(shù)組的內(nèi)容布局,而不考慮特定的排序。 這可以通過(guò)迭代上述數(shù)組的轉(zhuǎn)置來(lái)看到。
>>> import numpy as np >>> a = np.arange(0, 60, 5) >>> a.shape = 3, 4 >>> a array([[ 0, 5, 10, 15],[20, 25, 30, 35],[40, 45, 50, 55]]) >>> b = a.T >>> b array([[ 0, 20, 40],[ 5, 25, 45],[10, 30, 50],[15, 35, 55]]) >>> for x in np.nditer(b): ... print(x) ... ... 0 5 10 15 20 25 30 35 40 45 50 55迭代順序
如果相同元素使用F風(fēng)格順序存儲(chǔ),則迭代器選擇以更有效的方式對(duì)數(shù)組進(jìn)行迭代。
示例 1
>>> c = b.copy(order='F') >>> for x in np.nditer(c): ... print(x) ... ... 0 5 10 15 20 25 30 35 40 45 50 55 >>>示例 2
可以通過(guò)顯式提醒,來(lái)強(qiáng)制nditer對(duì)象使用某種順序:
>>> for x in np.nditer(a, order='C'): ... print(x) ... ... 0 5 10 15 20 25 30 35 40 45 50 55 >>> for x in np.nditer(a, order='F'): ... print(x) ... ... 0 20 40 5 25 45 10 30 50 15 35 55 >>>修改數(shù)組的值
nditer對(duì)象有另一個(gè)可選參數(shù)op_flags。 其默認(rèn)值為只讀,但可以設(shè)置為讀寫或只寫模式。 這將允許使用此迭代器修改數(shù)組元素。
示例
>>> for x in np.nditer(a, op_flags=['readwrite']): ... x[...]=2*x ... ... >>> a array([[ 0, 10, 20, 30],[ 40, 50, 60, 70],[ 80, 90, 100, 110]]) >>>外部循環(huán)
nditer類的構(gòu)造器擁有flags參數(shù),它可以接受下列值:
| 1. | c_index 可以跟蹤C(jī)順序的索引 |
| 2. | f_index 可以跟蹤Fortran順序的索引 |
| 3. | multi-index 每次迭代可以跟蹤一種索引類型 |
| 4. | external_loop 給出的值是具有多個(gè)值的一維數(shù)組,而不是零維數(shù)組 |
示例
在下面的示例中,迭代器遍歷對(duì)應(yīng)于每列的一維數(shù)組。
>>> for x in np.nditer(a, flags=['external_loop'], order='F'): ... print(x) ... ... [ 0 40 80] [10 50 90] [ 20 60 100] [ 30 70 110]廣播迭代
如果兩個(gè)數(shù)組是可廣播的,nditer組合對(duì)象能夠同時(shí)迭代它們。 假設(shè)數(shù)組a具有維度 3X4,并且存在維度為 1X4 的另一個(gè)數(shù)組b,則使用以下類型的迭代器(數(shù)組b被廣播到a的大小)。
示例
>>> a = np.arange(0, 60, 5) >>> a.shape = 3, 4 >>> b = np.arange(1, 5) >>> a array([[ 0, 5, 10, 15],[20, 25, 30, 35],[40, 45, 50, 55]]) >>> b array([1, 2, 3, 4]) >>> for x,y in np.nditer([a, b]): ... print(x, ':', y) ... ... 0 : 1 5 : 2 10 : 3 15 : 4 20 : 1 25 : 2 30 : 3 35 : 4 40 : 1 45 : 2 50 : 3 55 : 4轉(zhuǎn)載于:https://www.cnblogs.com/oneTOinf/p/10504185.html
總結(jié)
以上是生活随笔為你收集整理的08.Numpy数组迭代的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 饥荒指令代码大全一览
- 下一篇: 408考研经验分享(待更