【发布时间】:2021-06-10 01:38:15
【问题描述】:
有没有办法可以修改下面的函数,以便它可以计算具有不同长度大小的数组。 Numbers 数组的长度是 7,Formating 的长度是 5。下面的代码比较 Formating 中的任何数字是否介于两个值之间,如果是这种情况,那么它将介于两者之间的值相加.因此,由于Numbers 中没有元素介于0, 2 之间,因此对于第一次计算,结果将为 0。代码链接来自:issue。
代码:
Numbers = np.array([3, 4, 5, 7, 8, 10,20])
Formating = np.array([0, 2 , 5, 12, 15])
x = np.sort(Numbers);
l = np.searchsorted(x, Formating, side='left')
mask=(Formating[:-1,None]<=Numbers)&(Numbers<Formating[1:,None])
N=Numbers[:,None].repeat(5,1).T
result= np.ma.masked_array(N,~mask)
result = result.filled(0)
result = np.sum(result, axis=1)
预期输出:
[ 0 7 30 0]
【问题讨论】:
-
那段代码有什么问题?
-
@hpaulj 它没有运行:-)。应该是
N=Numbers[:,None].repeat(4,1).T。那就是说x和l是多余的,而且是错误的! -
和
result的所有东西似乎都过头了。(mask * Numbers[None, :]).sum(axis=1)工作正常。也就是说,来自 OP 的这一系列问题看起来像是一个 XY 问题。 -
x和l来自不同的解决方案,mask是我提出的。在N中使用5是从Formatting有6 个术语时遗留下来的;显然 (?) 如果Formating更改此值也应该如此。我建议使用np.ma作为可视化mask使用的一种方式。np.ma.sum会处理 0 填充。
标签: python arrays function numpy size