如何更简便生成竖列蛇形递增的Numpy矩阵?
更简洁实现“竖列蛇形递增”矩阵的方法
你的“竖列蛇形递增”排列逻辑很有意思——从左下角开始交替上下递增,当前的拼接翻转方法虽然能实现,但确实有点繁琐。这里有个更简洁的实现思路,用NumPy的广播和条件判断一步到位,不用反复拼接临时数组。
核心思路
我们可以直接根据每个元素的行索引和列索引来计算它的数值,核心规则是:
- 对于偶数列(从0开始计数,比如第0、2、4列):数值从下到上递增,对应行索引
row的数值为列号 × 行数 + (行数 - 1 - 行号) - 对于奇数列(比如第1、3、5列):数值从上到下递增,对应行索引
row的数值为列号 × 行数 + 行号
这个逻辑完全贴合你要的排列规则,而且不管行数、列数是多少,只要改两个参数就能生成对应矩阵。
实现代码
比如你需要的12行21列矩阵,代码如下:
import numpy as np # 定义矩阵的行数和列数 rows = 12 cols = 21 # 生成行索引和列索引的网格(确保行在前,列在后) row_idx, col_idx = np.meshgrid(np.arange(rows), np.arange(cols), indexing='ij') # 根据列的奇偶性计算每个位置的数值 snake_matrix = np.where( col_idx % 2 == 0, col_idx * rows + (rows - 1 - row_idx), col_idx * rows + row_idx ) # 查看结果 print(snake_matrix)
代码说明
np.meshgrid用来生成整个矩阵的行、列索引网格,indexing='ij'是为了符合我们平时对矩阵“行优先”的索引习惯。np.where是关键:它会遍历每个元素,根据列是否为偶数选择对应的计算方式,直接生成最终矩阵。- 全程不需要临时数组的拼接、翻转,代码简洁易读,而且如果后续要调整矩阵大小,只需要修改
rows和cols两个变量就行,非常灵活。
如果你需要验证和你之前的逻辑一致,比如把rows改成21、cols改成12,生成的矩阵就和你提供的f完全一样。
内容的提问来源于stack exchange,提问作者Whud
相关产品推荐
相关产品推荐

