迭代的方法
| 方法 | 描述 |
|---|---|
| 单纯读取 | 使用循环读取 |
| numpy.nditer() | 将数组转换为 nditer,快速迭代多维数组里面的元素 |
| numpy.ndenumerate() | 在迭代的时候,返回元素的索引值 |
简单读取
通过循环,读取多维数组里面的元素
import numpy as np
a = np.array([1,2,3,4,5,6])
for i in a:
print(i, end=' ') # 1 2 3 4 5 6
b = np.array([[1,2,3],[4,5,6]])
for i in b:
print(i, end=' ') # [1 2 3] [4 5 6]
for i in b:
for j in i:
print(j, end=' ') # 1 2 3 4 5 6
numpy.ndinter()
numpy.nditer() 方法可以将数组转换成 nditer 物件,使用后能快速迭代多维数组列內的所有元素,进行更灵活的操作,以下方的例子而言,如果要取出三维数组內的元素,需要使用三层 for 循环,但如果数组转换成 nditer 物件,只需要使用一次 for 循环就能取出全部的元素。
import numpy as np
b = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
for i in b:
for j in i:
for k in j:
print(k, end=' ') # 1 2 3 4 5 6 7 8 使用三次 for 循环,一层层取出原始
print()
for i in np.nditer(b):
print(i, end= ' ') # 1 2 3 4 5 6 7 8 只使用一次 for 循环就能取出所有元素
下方的例子会按照 C 方式或 F 方式进行排序取值
NumPy 数组在内存中以连续块存储,多维数组的存储顺序有两种:
● C 风格(行优先,C-order):先存储完一行(第一个维度)再存储下一行,即最后一个维度变化最快。
● Fortran 风格(列优先,F-order):先存储完一列(最后一个维度)再存储下一列,即第一个维度变化最快。 具体说明:
- order='C'(默认,C 风格行优先) 迭代时按行优先顺序遍历数组,即优先遍历完第一个维度的所有元素,再进入下一个维度,对应内存中 C 语言的存储顺序。
- order='F'(Fortran 风格列优先) 迭代时按列优先顺序遍历数组,即优先遍历完最后一个维度的所有元素,再进入上一个维度,对应 Fortran 语言的存储顺序
numpy.ndenumerate()
numpy.ndenumerate() 会回传迭代数组,该元素的索引值,下方的例子打印出这个元素的位置 ( 例如 4 位在 [0,1,0] 的位置 )
import numpy as np
a = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
for i,j in np.ndenumerate(a):
print(i,j)
'''
(0, 0, 0) 1
(0, 0, 1) 2
(0, 0, 2) 3
(0, 1, 0) 4
(0, 1, 1) 5
(0, 1, 2) 6
(1, 0, 0) 7
(1, 0, 1) 8
(1, 0, 2) 9
(1, 1, 0) 10
(1, 1, 1) 11
(1, 1, 2) 12
'''