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

Python新手求助:np.delete如何删除矩阵中含绝对值最大值的所有行列

解决方阵删除所有含绝对值最大值行列的问题

嘿,我懂你的困扰——你的代码现在只能处理第一个碰到的包含绝对值最大值的行和列,但实际上可能有好几行、好几列都藏着这个最大值,得把它们全都删掉才对对吧?咱们来一步步把这个问题搞定!

核心思路拆解

要解决这个问题,关键是先找出所有需要删除的行和列,而不是只找第一个:

  1. 先确定矩阵中元素的绝对值最大值
  2. 遍历整个矩阵,标记所有包含这个最大值的行索引和列索引
  3. 生成新矩阵时,跳过所有标记过的行和列

纯Python实现(不用第三方库)

如果是用原生Python列表来处理矩阵,可以这样写:

# 获取用户输入生成方阵
n = int(input("请输入方阵的维度:"))
matrix = []
for i in range(n):
    row = []
    for j in range(n):
        num = int(input(f"请输入第{i+1}行第{j+1}列的元素:"))
        row.append(num)
    matrix.append(row)

# 步骤1:计算绝对值最大值
max_abs = max(abs(num) for row in matrix for num in row)

# 步骤2:收集所有需要删除的行和列索引(用集合避免重复)
rows_to_remove = set()
cols_to_remove = set()

for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        if abs(matrix[i][j]) == max_abs:
            rows_to_remove.add(i)
            cols_to_remove.add(j)

# 步骤3:生成新矩阵,排除要删除的行和列
new_matrix = []
for row_idx in range(len(matrix)):
    if row_idx not in rows_to_remove:
        new_row = []
        for col_idx in range(len(matrix[row_idx])):
            if col_idx not in cols_to_remove:
                new_row.append(matrix[row_idx][col_idx])
        new_matrix.append(new_row)

# 打印结果
print("\n原方阵:")
for row in matrix:
    print(row)
print("\n删除含绝对值最大值的行列后的新矩阵:")
for row in new_matrix:
    print(row)

用Numpy简化实现(更高效)

如果允许用Numpy库,代码会简洁很多,适合处理更大的矩阵:

import numpy as np

# 获取用户输入生成方阵
n = int(input("请输入方阵的维度:"))
matrix = np.zeros((n, n), dtype=int)
for i in range(n):
    for j in range(n):
        matrix[i][j] = int(input(f"请输入第{i+1}行第{j+1}列的元素:"))

# 步骤1:计算绝对值最大值
max_abs = np.max(np.abs(matrix))

# 步骤2:找出所有需要删除的行和列(布尔数组标记)
rows_to_remove = np.any(np.abs(matrix) == max_abs, axis=1)  # 检查每一行是否有最大值
cols_to_remove = np.any(np.abs(matrix) == max_abs, axis=0)  # 检查每一列是否有最大值

# 步骤3:生成新矩阵,~表示取反(保留未标记的行和列)
new_matrix = matrix[~rows_to_remove][:, ~cols_to_remove]

# 打印结果
print("\n原方阵:\n", matrix)
print("\n删除含绝对值最大值的行列后的新矩阵:\n", new_matrix)

关键细节说明

  • 用集合存要删除的行/列索引:避免同一行/列因为有多个最大值被重复标记,确保只删一次
  • Numpy里的np.any():快速判断整行/整列是否存在目标元素,比手动遍历高效得多
  • 特殊情况处理:如果所有元素都是绝对值最大值,删除后会得到空矩阵,你可以根据需求加个判断提示用户

这样修改后,不管有多少行或列包含绝对值最大值,都会被一次性全部删除啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:38:44