如何以多种方式遍历多维NumPy数组?含行、列及反向遍历示例
NumPy数组的四种遍历实现
首先先把你给出的列表转换成NumPy数组,这是操作的前提:
import numpy as np A = np.array([["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]])
下面针对四种遍历需求分别给出实现方式:
1. 按行遍历
这是最基础的遍历顺序,NumPy的数组展平方法默认就是按行(C语言顺序)来的,一行一行把元素串起来:
# 方法1:直接展平(推荐) O1 = A.flatten().tolist() # 或者用ravel(),区别是ravel返回原数组视图,flatten返回副本 # O1 = A.ravel().tolist() # 手动遍历的方式(适合理解逻辑) O1_manual = [] for row in A: O1_manual.extend(row)
两种方法得到的结果都是 ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
2. 按列遍历
要实现按列遍历,核心是先把数组的行和列转置,让原来的列变成行,再按行展平就行:
# 方法1:转置后展平(推荐) O2 = A.T.flatten().tolist() # 手动遍历的方式 O2_manual = [] # 遍历转置后的每一行(也就是原数组的每一列) for col in A.T: O2_manual.extend(col) # 或者通过索引遍历 O2_index = [] for j in range(A.shape[1]): for i in range(A.shape[0]): O2_index.append(A[i, j])
结果都是 ["a", "d", "g", "b", "e", "h", "c", "f", "i"]
3. 反向按行遍历
简单来说就是先把整个数组的行反转,再把每行的元素反转,最后展平:
# 方法1:切片组合(推荐,简洁高效) O3 = A[::-1, ::-1].flatten().tolist() # 手动遍历的方式 O3_manual = [] # 先反向遍历行,再反向遍历每行的元素 for row in reversed(A): O3_manual.extend(reversed(row))
这里A[::-1]是把行的顺序反转(变成[["g","h","i"], ["d","e","f"], ["a","b","c"]]),[:,::-1]是把每行的元素反转,最终展平后得到 ["i", "h", "g", "f", "e", "d", "c", "b", "a"]
4. 反向按列遍历
你需要的顺序是从最后一列到第一列,每列从最后一行到第一行,可以通过切片组合或者手动索引实现:
# 方法1:切片组合(推荐) O4 = A[::-1, ::-1].T.flatten().tolist() # 手动遍历的方式 O4_manual = [] # 先反向遍历列索引(从右到左) for j in reversed(range(A.shape[1])): # 再反向遍历行索引(从下到上) for i in reversed(range(A.shape[0])): O4_manual.append(A[i, j])
最终结果是 ["i", "f", "c", "h", "e", "b", "g", "d", "a"],完全符合你的需求。
内容的提问来源于stack exchange,提问作者rlcmtzc
相关产品推荐
相关产品推荐

