【问题标题】:Working with 2 arrays with different lengths Numpy Python使用 2 个不同长度的数组 Numpy Python
【发布时间】: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


【解决方案1】:

这是bincounts 的一种方法。请注意,您的x 和l 搞砸了,我记得您可以/应该使用digitize:

# Formating goes here
x = np.sort(Formating);

# digitize
l = np.digitize(Numbers, x)

# output:
np.bincount(l, weights=Numbers)

输出:

array([ 0.,  0.,  7., 30.,  0., 20.])

【讨论】:

  • 有没有办法可以将输出修改为设置边界之间并导致[ 0 7 30 0]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 2015-08-24
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 2022-07-12
相关资源
最近更新 更多