NumPy ndarray通用索引优化:有无替代列表转元组的更优方案?
更简洁的NumPy元组索引方法
你当前用列表转元组的方式确实能实现需求,但有几种更简洁的处理方式,不用依赖列表的可变性:
1. 直接按需构造索引元组
不用维护列表变量,直接在索引时根据dim的值生成对应元组,省去列表转元组的步骤:
import numpy as np # dim = 0 dim = 1 m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) for i in range(3): for j in range(3): # 根据dim直接构造索引元组 idx = (i, j) if dim == 0 else (j, i) print(m[idx], end='') print()
2. 利用NumPy内置操作避免循环
如果需求是按行或列遍历打印,可借助NumPy的转置(.T)特性,跳过手动构造索引的循环,代码更简洁且效率更高:
import numpy as np # dim = 0 dim = 1 m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # dim=0时用原数组,dim=1时用转置后的数组 target_array = m if dim == 0 else m.T # 直接遍历数组的行 for row in target_array: print(''.join(map(str, row)))
3. 简化循环逻辑,一行生成打印内容
把内层循环的索引构造和打印合并成一行,进一步精简代码:
import numpy as np # dim = 0 dim = 1 m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) for i in range(3): # 用生成器表达式一次性生成该行的所有元素字符串 print(''.join(str(m[(i,j) if dim==0 else (j,i)]) for j in range(3)))
内容的提问来源于stack exchange,提问作者Ori Mosenzon
相关产品推荐
相关产品推荐

