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

如何更简便生成竖列蛇形递增的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)

代码说明

  1. np.meshgrid用来生成整个矩阵的行、列索引网格,indexing='ij'是为了符合我们平时对矩阵“行优先”的索引习惯。
  2. np.where是关键:它会遍历每个元素,根据列是否为偶数选择对应的计算方式,直接生成最终矩阵。
  3. 全程不需要临时数组的拼接、翻转,代码简洁易读,而且如果后续要调整矩阵大小,只需要修改rows和cols两个变量就行,非常灵活。

如果你需要验证和你之前的逻辑一致,比如把rows改成21、cols改成12,生成的矩阵就和你提供的f完全一样。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:13:21