如何用NumPy实现多维数组按对应一维数组元素逐行除法?
逐行对应元素除法的实现方法
方法一:利用Numpy广播机制(推荐)
Numpy的广播特性可以让你不用写循环,直接完成逐行的对应除法操作,代码简洁且效率更高:
import numpy as np profile = np.array([[1,2,3,5],[3,6,2,5],[2,8,3,5]]) radius = np.array([4,8,3]) # 将radius转换为(3,1)的列向量,触发广播 profile_new = profile / radius[:, np.newaxis]
radius[:, np.newaxis]会把原本形状为(3,)的一维数组转换为(3,1)的二维数组,Numpy会自动将其扩展为与profile相同的(3,4)形状,从而实现每行元素对应除以radius的对应元素。
方法二:手动循环实现
如果需要用循环来完成,你需要先初始化一个和profile形状一致的数组,再逐行赋值:
import numpy as np profile = np.array([[1,2,3,5],[3,6,2,5],[2,8,3,5]]) radius = np.array([4,8,3]) # 初始化同形状的空数组,指定浮点类型避免整数除法问题 profile_new = np.empty_like(profile, dtype=np.float64) for idx in range(len(radius)): profile_new[idx] = profile[idx] / radius[idx]
你之前的循环代码问题在于没有保存每行的计算结果,而且变量名重复覆盖,导致最终只保留了最后一次循环的结果。
内容的提问来源于stack exchange,提问作者alaskagirl
相关产品推荐
相关产品推荐

