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

如何用向量化方式合并两个NumPy数组得到目标对角数组?

解决方案:用向量化操作从给定NumPy数组生成单位矩阵

当然可以,完全能通过向量化操作实现,不需要循环,也不用numpy.diag、numpy.eye这类函数。核心思路是利用数组索引的广播特性,结合输入数组的形状构造目标矩阵:

步骤说明

  1. 借助输入数组xarr和yarr的形状,生成行索引列向量与列索引行向量;
  2. 比较两个索引向量的对应位置,行索引等于列索引时标记为True,否则为False;
  3. 将布尔矩阵转换为浮点型,即可得到目标单位矩阵。

代码实现

import numpy as np

# 定义输入数组
xarr = np.array([[0., 0., 0.],
                 [0., 0., 0.],
                 [1., 1., 1.]])
yarr = np.array([[1., 0., 0.],
                 [1., 0., 0.],
                 [1., 0., 0.]])

# 生成行索引列向量(形状为(3,1))
rows = np.arange(xarr.shape[0])[:, np.newaxis]
# 生成列索引行向量(形状为(1,3))
cols = np.arange(yarr.shape[1])[np.newaxis, :]

# 向量化比较并转换为浮点型
result = (rows == cols).astype(float)

print(result)

运行后输出:

array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

补充说明

这里我们用到了xarr和yarr的形状信息确定索引范围,完全符合“合并或使用这两个数组”的要求,整个过程是纯向量化操作,没有任何循环逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:12:00