如何从numpy数组k中减去数组f得到目标结果(续篇)
用Numpy广播实现数组减法(和乘法解法逻辑一致)
嘿,这问题刚好可以沿用你之前乘法的思路,用numpy的广播机制搞定,步骤超简洁!
核心思路
和你之前“每一列与另一个数组每个值相乘”的解法逻辑完全一致——利用numpy的广播特性,不用写循环,直接通过维度自动匹配完成逐元素的对应减法。
示例演示
假设我们有以下数组:
import numpy as np # 二维数组k k = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]]) # 一维数组f,长度和k的列数一致 f = np.array([2, 4, 6])
如果想要实现k的每一列分别减去f中对应的元素(即第一列所有元素减2,第二列减4,第三列减6),直接一行代码搞定:
result = k - f
得到的结果正是你要的:
array([[ 3, 6, 9], [18, 21, 24], [33, 36, 39]])
维度调整(特殊场景)
如果你的数组维度和示例不同,只需要简单调整即可:
- 如果f是列向量(形状
(3,1)),想要每一行减去f的对应元素,用k - f.T转置后再减 - 如果想更直观地显式扩展维度(避免广播歧义),可以用
np.expand_dims:# 显式把f扩展为行向量,和k的行数匹配 result = k - np.expand_dims(f, axis=0)
为什么和乘法解法一致?
不管是乘法还是减法,numpy的广播规则都是一样的:只要两个数组的维度在某个轴上长度相等,或者其中一个为1,就会自动扩展维度匹配,完成逐元素运算。这完全符合你“尽可能少步骤、和之前解法一致”的要求。
内容的提问来源于stack exchange,提问作者user8682794
相关产品推荐
相关产品推荐

