You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用Numpy的np.rot90随机旋转图像报NameError如何解决?

问题解决说明

你定义my_list时直接书写np.rot90(x,k=2)、np.rot90(x,k=3)属于即时函数调用,会在列表创建阶段就执行这两行代码,此时变量x还未定义,因此触发NameError。你需要将带固定k参数的旋转逻辑封装为仅接收图像作为输入的可调用对象,而非直接执行函数。

方法1:使用lambda封装参数

将不同旋转参数的逻辑都包装为单参数lambda函数,调用时只需传入图像即可:

import random
import numpy as np

images = [np.random.randint(100, size=(120, 120)) for _ in range(10)]
# 每个元素都是仅接收图像x作为输入的可调用对象
my_list = [
    lambda x: x,  # 不旋转
    lambda x: np.rot90(x, k=1),  # 逆时针旋转90度
    lambda x: np.rot90(x, k=2),  # 旋转180度
    lambda x: np.rot90(x, k=3)   # 逆时针旋转270度
]

a = [random.choice(my_list)(image) for image in images]

方法2:使用偏函数固定参数

也可以用functools.partial提前固定np.rot90的k参数,生成新的单参数可调用对象:

import random
import numpy as np
from functools import partial

images = [np.random.randint(100, size=(120, 120)) for _ in range(10)]
my_list = [
    lambda x: x,
    partial(np.rot90, k=1),
    partial(np.rot90, k=2),
    partial(np.rot90, k=3)
]

a = [random.choice(my_list)(image) for image in images]

你之前修改为my_list = [lambda x: x,np.rot90, np.rot90]没有报错,是因为此时列表中后两个元素都是np.rot90函数本身,没有被即时调用,但两者默认都使用k=1的参数,自然无法实现不同旋转角度的需求。

内容的提问来源于stack exchange,提问作者jony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:54:03