将上一个值替换为上一个值

时间:2018-01-14 13:00:09

标签: python arrays numpy count

我有一系列不完整的三元组:

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或更多。

4 个答案:

答案 0 :(得分:1)

这是一种方式 -

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])

答案 1 :(得分:1)

def complete(array, n):
    remain = array.size % n
    complete_array = array.copy()
    if remain != 0:
        complete_array[-remain:] = complete_array[-n]
    return complete_array

答案 2 :(得分:1)

你可以试试这个:

def filler(a,n=3):
    if len(np.unique(a[-n:])) == 1:
        return a
    else:
        a[-n:].fill(a[-n-1])
        return a

答案 3 :(得分:0)

试试这个:(我不确定numpy转换,因为我从来没用过numpy)

a = np.arrange(12) // 3 + 1
a = a.tolist()

num = len(a) // 3
num2 = len(a) % 3
b = []
for i in range(1, num + 1):
    b.append(i)
    b.append(i)
    b.append(i)

for j in range(1, num2 + 1):
    b.append(num)

print(b)