我有一个numpy阵列:
>>> n1 = np.array([1, 1, 2, 1, 4, 5, 3, 8, 2, 9, 9])
由此,我可以得到从开始到下一个较低数量开始之前的最高值的元素数量,如下所示:
^{pr2}$我可以在数组的开头插入0:
>>> wherediff = np.insert(wherediff, 0, 0)
>>> wherediff
array([0, 3, 6, 8])
我可以得到每个连续值之间的元素数:
>>> sum_vals = np.abs(wherediff[1:] - wherediff[:-1])
>>> sum_vals
array([3, 3, 2])
现在,我想生成另一个具有以下属性的numpy数组:
sum_vals[0]
,我希望它位于range(wherediff[0], wherediff[1])
的位置)sumvals[1]
,我希望它位于range(wherediff[1], wherediff[2])
的位置我试过了:
>>> n3 = []
>>> for i in range(1, wherediff.shape[0]):
... s1 = set(range(wherediff[i]))
... s2 = set(range(wherediff[i-1]))
... s3 = np.setdiff1d(s1, s2)[0]
... n3.append(np.repeat(i, len(s3)))
我想稍后切换到一个数组,但是setdiff1d
函数没有按预期执行。它正在这样做:
>>> for i in range(1, wherediff.shape[0]):
... s1 = set(range(wherediff[i]))
... s2 = set(range(wherediff[i-1]))
... s3 = np.setdiff1d(s1, s2)[0]
... print(s3)
...
set([0, 1, 2])
set([0, 1, 2, 3, 4, 5])
set([0, 1, 2, 3, 4, 5, 6, 7])
然而我想要
0 1 2
3 4 5
6 7
8, 9, 10
有什么想法吗?在
跳过所有的setdiff1d和索引操作,使用布尔数组:
cumsum
对每一个True
加1,所以第一个元素加一次,每次{如果您使用的是本机python集,那么也可以在不使用numpy的情况下执行diff操作:
如果你想做任何事情都在纽比,那么这就是方法:
^{pr2}$请注意,您可以在这里使用
assume_unique=True
。。。在相关问题 更多 >
编程相关推荐