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

如何在Python的Numpy数组中填充过指定点的副对角线?

在Numpy中填充经过指定点的副对角线元素为1

要实现将Numpy全0数组中经过指定点P=(p1,p2)的副对角线元素全部设为1,核心思路是找到所有满足行索引+列索引 = p1+p2的位置(这类位置构成一条副对角线),再将这些位置赋值为1。

实现步骤

  1. 创建指定形状的全0Numpy数组;
  2. 计算目标副对角线的索引和:diag_sum = p1 + p2;
  3. 生成数组的行、列索引网格,筛选出满足行索引+列索引=diag_sum的位置;
  4. 将筛选出的位置赋值为1。

代码示例

import numpy as np

# 示例1:处理点P=(1,4),5x5数组
arr1 = np.zeros((5, 5), dtype=int)
p1, p2 = 1, 4
diag_sum = p1 + p2
rows, cols = arr1.shape
row_idx, col_idx = np.indices((rows, cols))
# 生成掩码,筛选目标副对角线位置
mask = (row_idx + col_idx) == diag_sum
arr1[mask] = 1
print("P=(1,4)的结果数组:")
print(arr1)

# 示例2:处理点P=(3,0),5x5数组
arr2 = np.zeros((5, 5), dtype=int)
p1, p2 = 3, 0
diag_sum = p1 + p2
row_idx, col_idx = np.indices(arr2.shape)
mask = (row_idx + col_idx) == diag_sum
arr2[mask] = 1
print("\nP=(3,0)的结果数组:")
print(arr2)

运行结果

执行上述代码后,输出与题目示例完全一致:

P=(1,4)的结果数组:
[[0 0 0 0 0]
 [0 0 0 0 1]
 [0 0 0 1 0]
 [0 0 1 0 0]
 [0 1 0 0 0]]

P=(3,0)的结果数组:
[[0 0 0 1 0]
 [0 0 1 0 0]
 [0 1 0 0 0]
 [1 0 0 0 0]
 [0 0 0 0 0]]

扩展说明

  • 该方法适用于任意形状的Numpy数组(非方阵也可),会自动筛选出数组范围内有效的索引位置;
  • 利用Numpy的向量化操作,效率远高于循环遍历,适合处理大规模数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:18:27