如何使用Numpy生成指定外层数值的漩涡(Whirlpool)型图案?
使用Numpy生成漩涡型图案
实现思路
核心是利用切比雪夫距离定义“层数”:每个点到数组中心的切比雪夫距离(横向、纵向距离中的较大值),正好对应该点所在的层——中心距离为0,向外每一层距离加1,最外层的距离就是你设定的最大值。
函数实现
import numpy as np def create_whirlpool(max_val): # 校验输入范围 if not (1 <= max_val <= 10): raise ValueError("最外层数值必须在1-10之间") # 计算数组边长:中心0到外层max_val,两边各max_val个元素,总长度2*max_val+1 side_length = 2 * max_val + 1 center = max_val # 中心坐标(索引从0开始) # 生成网格坐标 x = np.arange(side_length) y = np.arange(side_length) xx, yy = np.meshgrid(x, y) # 计算每个点到中心的切比雪夫距离,即为对应层的数值 whirlpool = np.maximum(np.abs(xx - center), np.abs(yy - center)) return whirlpool
示例使用
# 生成最外层为3的漩涡图案 print(create_whirlpool(3))
输出结果:
[[3 3 3 3 3 3 3] [3 2 2 2 2 2 3] [3 2 1 1 1 2 3] [3 2 1 0 1 2 3] [3 2 1 1 1 2 3] [3 2 2 2 2 2 3] [3 3 3 3 3 3 3]]
关键说明
- 切比雪夫距离的特性完美匹配“层”的定义,无需复杂循环或条件判断,利用Numpy向量化操作高效生成数组。
- 输入校验确保最外层数值符合要求,避免无效输入。
- 数组边长由
max_val动态计算,完全无需硬编码,适配不同外层数值需求。
内容的提问来源于stack exchange,提问作者Coding99
相关产品推荐
相关产品推荐

