如何使用Python对列表中的NumPy数组随机应用旋转和翻转操作
NumPy数组列表随机应用变换的实现方法
你传入numpy.random.choice的数组列表会被NumPy自动转换为高维数组,不符合该函数要求输入必须为1维的规则,因此抛出ValueError: a must be 1-dimensional错误。
实现思路
不需要直接对数组做抽样,改为提前定义所有可选变换的集合,对每个数组随机抽取一个变换应用即可,规避高维输入的问题。
完整代码示例
import numpy as np # 你的原始NumPy数组列表,此处为示例数据 arr_list = [np.random.randint(0, 255, (28, 28)) for _ in range(20)] # 定义可选变换:保持原样、rot90旋转、flip翻转 transform_ops = [ lambda x: x, # 保持原始状态 lambda x: np.rot90(x), # 逆时针旋转90度,可加k参数指定旋转次数:np.rot90(x, k=2)即旋转180度 lambda x: np.flip(x) # 全轴翻转,也可替换为np.fliplr(左右翻转)或np.flipud(上下翻转) ] processed_list = [] for arr in arr_list: # 随机选择变换的索引,p参数可自定义各变换的概率,需和transform_ops长度一致,总和为1 op_idx = np.random.choice(len(transform_ops), p=[0.4, 0.3, 0.3]) processed_list.append(transform_ops[op_idx](arr))
可选调整项
- 如需调整各类变换的占比,修改
np.random.choice的p参数即可,比如设置80%保持原始、10%旋转、10%翻转的规则,改为p=[0.8, 0.1, 0.1] - 如需固定随机结果用于复现,在代码开头加
np.random.seed(任意整数)即可
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

