我有一系列不完整的三元组:
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
或更多。
答案 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)