如何解决在数组 Numpy Python 之间格式化值
我正在尝试编写一个函数,它检查 Numbers
元素是否在 Formating
值之间。因此,对于 Numbers
的第一个元素,3 不在 0,2
的第一个和第二个元素 Formating
之间,因此它返回 0 作为 result
。对于 3,4
中的元素 Numbers
在 2,5
之间,因此它返回那些 3,4
作为 2,5 之间的数字。 index
值不断增加,直到 Formating
数组结束。我如何修复下面的函数,以便在没有 for 循环的情况下提供预期的输出。
Numbers = np.array([3,4,5,7,8,10,20])
Formating = np.array([0,2,12,15,22])
#prevIoUse and curent index values
prevs = np.arange(0,len(Formating)-1,1)
currents = np.arange(1,len(Formating),1)
index = 0
np.where(Formating[prevs[index]] <= Numbers < Formating[currents[index]],Numbers,++index)
预期输出:
Numbers between 0,2 = 0
Numbers between 2,5 = 3,4
Numbers between 5,12 = 5,10
Numbers between 12,15 = 0
Numbers between 15,22 = 20
解决方法
你可以先排序再搜索排序,这样运行效率会更高(IO除外)
Numbers = np.array([3,4,5,7,8,10,20])
Formating = np.array([0,2,12,15,22])
x = np.sort(Numbers);
l = np.searchsorted(x,Formating,side='left')
for i in range(len(l)-1):
if l[i] >= l[i+1]:
print('Numbers between %d,%d = _0_' % (Formating[i],Formating[i+1]))
else:
print('Numbers between %d,%d = %s' % (Formating[i],Formating[i+1],','.join(map(str,list(x[l[i]:l[i+1]])))))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。