加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Numpy 遍历数组

发布时间:2023-07-01 15:11:30 所属栏目:教程 来源:
导读:Numpy 提供了一个迭代器对象 numpy.nditer,能够实现灵活地访问一个或者多个数组元素,达到遍历数组的目的。

1. 数组元素访问
1.1 按照内存布局打印数组元素
在默认情况下,numpy.nditer 迭代器返回的元素顺序,
Numpy 提供了一个迭代器对象 numpy.nditer,能够实现灵活地访问一个或者多个数组元素,达到遍历数组的目的。

1. 数组元素访问
1.1 按照内存布局打印数组元素
在默认情况下,numpy.nditer 迭代器返回的元素顺序,是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先。

例如,我们对于新创建的 2×3 的数组,利用 nditer 迭代器进行顺序访问:

arr = np.arange().reshape(,)
arr
Out: 
    array([[, , ],   [, , ]])
for i in np.nditer(arr):print(i, end= )

可以看到,在不增加其他设置的情况下,默认的打印顺序是行序优先(即 C-order)。

在不改变内部布局的情况下,通过该方式进行遍历,并不会改变顺序,例如我们通过迭代上述数组的转置来证明这一点。

for i in np.nditer(arr.T):print(i, end= )
   
从上述结果可以看出,转置方法并未改变数组元素的存储顺序。

相对应的,我们利用 copy 方法,显式地更改内存顺序,nditer 迭代器的遍历解雇也会发生响应的变化:

for i in np.nditer(arr.T.copy(C)):print(i, end= )

1.2 控制遍历顺序
如果想要改变遍历的顺序,一种是上面案例中提到的,利用 copy 方法来修改内存顺序。当然,nditer 也提供了 order 参数来达到同样的目的。

C order,即是行序优先,跟默认的遍历顺序一致。

print ('以 C 风格顺序排序:')for i in np.nditer(arr, order=C):print(i, end= )

print ('以 F 风格顺序排序:')for i in np.nditer(arr, order=F):print(i, end= )

2. 数组元素修改
nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。

在遍历的时候,对数组进行平方计算,生成一个特殊的平方方阵。

arr1 = np.arange().reshape(,)
arr1
Out:array([[ ,  ,  ,  ],   [ ,  ,  ,  ],   [ ,  , , ],   [, , , ]])
# 指定读写模式for i in np.nditer(arr1, op_flags=[readwrite]):i[...] = i**
arr1
Out:array([[  ,   ,   ,   ],   [ ,  ,  ,  ],   [ ,  , , ],   [, , , ]])
在读写模式下,arr1 数组发生了变化。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章