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

如何查找数组全零行与全零列的交点并设为1,无交点则跳过?

NumPy数组全零行列交点置1解决方案

需求说明

在NumPy数组中查找所有全零行和全零列,将它们的交点位置的值设为1;若不存在这样的交点,则跳过此操作。

输入数组

import numpy as np

uvv = np.array([[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
                [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
                [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
                [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
                [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

已有尝试代码

你已经正确完成了全零行和全零列的识别:

# 标记全零行和全零列
m1 = ~uvv.any(axis=1)  # 全零行标记(布尔数组)
m2 = ~uvv.any(axis=0)  # 全零列标记(布尔数组)

# 获取全零行和全零列的索引
rows = np.nonzero(m1)[0]  # 全零行索引列表
cols = np.nonzero(m2)[0]  # 全零列索引列表

完整实现代码

在已有代码基础上,补充交点置1的逻辑,提供两种实现方式:

方式1:循环遍历(直观易读)

# 检查是否存在全零行和全零列
if len(rows) > 0 and len(cols) > 0:
    # 遍历所有交点并置1
    for row in rows:
        for col in cols:
            uvv[row, col] = 1

方式2:NumPy广播(高效简洁)

利用NumPy广播机制避免循环,大数组场景下性能更优:

# 检查是否存在全零行和全零列
if len(rows) > 0 and len(cols) > 0:
    # 广播索引,一次性设置所有交点为1
    uvv[rows[:, None], cols] = 1

结果验证

执行代码后,原数组中的第12行(索引11)是全零行,全零列是索引10,因此uvv[11, 10]会被设置为1,该行变为:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]

内容的提问来源于stack exchange,提问作者Maluma Corazón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:45:22