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

Python 基于Y==1条件填充二维numpy数组的实现问题

问题原因

你之前的写法是把Y中等于1的元素单独提取出来计算,丢失了原数组的位置信息,得到的结果形状和要求的(Y.shape[0], Y.shape[0])不匹配,所以不符合预期。

解决方法

我们可以先计算全量的原逻辑填充结果,再通过掩码过滤掉不需要修改的位置,保留初始值0即可,代码如下:

import numpy as np

# 你的输入数据
Y = np.array([[1], [2]])
# 初始化CN为全0
CN = np.zeros((Y.shape[0], Y.shape[0]), dtype=int)

# 第一步:计算原逻辑的全量填充结果
full_fill = np.where(Y.dot(Y.T) == np.square(Y), 1, 2)
# 第二步:构造掩码,满足以下任意条件的位置保留原填充结果,否则保持0
# 条件1:原逻辑填充值为2
# 条件2:原逻辑填充值为1,且该位置所在行对应的Y值为1
row_mask = (Y == 1).reshape(-1, 1) # 广播为(N,N)的行掩码
mask = (full_fill == 2) | ((full_fill == 1) & row_mask)

# 第三步:生成最终CN
CN = np.where(mask, full_fill, 0)

运行后得到的CN结果为:

[[1 2]
 [2 0]]

完全符合你的预期。

扩展说明

如果你的Y不是列向量,或者后续逻辑有调整,只需要修改row_mask的生成规则即可,不需要修改整体的计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:54:04