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

如何计算numpy数组每行对应的单位向量,解决广播运算报错问题?

问题原因

你遇到的广播错误是因为范数计算结果的维度和原数组不匹配:np.linalg.norm(A, axis=1)返回的是形状为(4,)的一维数组,无法直接和形状为(4,2)的二维数组执行广播运算。

正确实现方式

两种常用的可行写法:

推荐最简写法

计算范数时直接保留维度,不需要额外调整:

import numpy as np

A = np.array([[50,14],[26,11],[81,9],[-11,-19]])
# 计算每行范数时保留维度,得到形状为(4,1)的列向量
row_norms = np.linalg.norm(A, axis=1, keepdims=True)
# 直接执行除法即可,自动按行广播
A_unit = A / row_norms
# 如需原地修改,直接写 A /= row_norms 即可

手动调整维度写法

如果已经计算得到了一维的范数数组,手动新增列维度匹配广播规则:

row_norms = np.linalg.norm(A, axis=1)
# 手动将形状(4,)调整为(4,1)
A_unit = A / row_norms[:, np.newaxis]
# 也可写作 row_norms.reshape(-1, 1) 效果一致
补充说明
  • numpy的元素级运算(包括/、np.divide)没有axis参数,维度匹配完全依赖广播规则,不需要额外指定axis。
  • 可以通过如下代码验证结果正确性,输出的每行范数应该近似为1:
print(np.linalg.norm(A_unit, axis=1))
# 输出:[1. 1. 1. 1.]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:03:03