用上一个值替换最后一个值 [英] Replace last values by previous value

查看:59
本文介绍了用上一个值替换最后一个值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些不完整的三元组:

a = np.arange(10) // 3 + 1
print (a)
[1 1 1 2 2 2 3 3 3 4]

或者:

a1 = np.arange(11) // 3 + 1
print (a1)
[1 1 1 2 2 2 3 3 3 4 4]

最后一个值是4,但是我需要按以前的值(这里是3)进行更改,因为不是三倍.

我尝试:

unique, counts = np.unique(a, return_counts=True)
print (unique)
[1 2 3 4]

print (counts)
[3 3 3 1]

a的预期输出:

[1 1 1 2 2 2 3 3 3 3]

以及a1:

[1 1 1 2 2 2 3 3 3 3 3]

如果所有三元组都不变,则值不变:

a2 = np.arange(12) // 3 + 1
print (a2)

[1 1 1 2 2 2 3 3 3 4 4 4]

我需要一些常规解决方案,因为三元组应更改为4或更多.

解决方案

这是一种方法-

def replace_irregular_groupings(a, N=3):
    n = len(a)
    m = N*(n//N)
    if m!=n:
        a[m:] = a[m-1]
    return a

样品运行-

In [125]: replace_irregular_groupings(np.arange(9) // 3 + 1)
Out[125]: array([1, 1, 1, 2, 2, 2, 3, 3, 3])

In [126]: replace_irregular_groupings(np.arange(10) // 3 + 1)
Out[126]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 3])

In [127]: replace_irregular_groupings(np.arange(11) // 3 + 1)
Out[127]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3])

In [128]: replace_irregular_groupings(np.arange(12) // 3 + 1)
Out[128]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])

I have array of uncomplete triples:

a = np.arange(10) // 3 + 1
print (a)
[1 1 1 2 2 2 3 3 3 4]

Or:

a1 = np.arange(11) // 3 + 1
print (a1)
[1 1 1 2 2 2 3 3 3 4 4]

Last value is 4, but I need change it by previous, here 3, because not triples.

I try:

unique, counts = np.unique(a, return_counts=True)
print (unique)
[1 2 3 4]

print (counts)
[3 3 3 1]

Expected output for a:

[1 1 1 2 2 2 3 3 3 3]

and for a1:

[1 1 1 2 2 2 3 3 3 3 3]

If all triples, no value is changed:

a2 = np.arange(12) // 3 + 1
print (a2)

[1 1 1 2 2 2 3 3 3 4 4 4]

I need some general solution, because triples should be changed to 4 or more.

解决方案

Here's one way -

def replace_irregular_groupings(a, N=3):
    n = len(a)
    m = N*(n//N)
    if m!=n:
        a[m:] = a[m-1]
    return a

Sample runs -

In [125]: replace_irregular_groupings(np.arange(9) // 3 + 1)
Out[125]: array([1, 1, 1, 2, 2, 2, 3, 3, 3])

In [126]: replace_irregular_groupings(np.arange(10) // 3 + 1)
Out[126]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 3])

In [127]: replace_irregular_groupings(np.arange(11) // 3 + 1)
Out[127]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3])

In [128]: replace_irregular_groupings(np.arange(12) // 3 + 1)
Out[128]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])

这篇关于用上一个值替换最后一个值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆