关于Stack的第一个问题,大家好!用numpy数组和元组保留一个元素的快速方法
我有一个元组,有两个1D NP矩阵,从np.nonzero,例如:
(array([479, 479, 479, 480, 480, 480, 481, 481, 481, 482, 482, 482, 650, 650, 650, 651, 651, 651, 652, 652, 652, 653, 653, 653, 654, 654, 654, 708, 708, 708, 709, 709, 709, 710, 710, 710, 711, 711, 711, 712, 712, 712, 713, 713, 713], dtype=int64), array([ 859, 860, 861, 859, 860, 861, 859, 860, 861, 859, 860, 861, 1045, 1046, 1047, 1045, 1046, 1047, 1045, 1046, 1047, 1045, 1046, 1047, 1045, 1046, 1047, 1039, 1040, 1041, 1039, 1040, 1041, 1039, 1040, 1041, 1039, 1040, 1041, 1039, 1040, 1041, 1039, 1040, 1041], dtype=int64))
但在我的未来利用该元组将更大。我正在寻找最快的方法来保持元组第一列中每个元素(第一个元素)只有一个元素,并保留第二列中的第二个元素。此外,第一列进行排序
对于我的例子,我想这样的输出:
(array([479, 480, 481, 482, 650, 651, 652, 653, 654, 708, 709, 710, 711, 712], dtype=int64), array([861, 861, 861, 861, 1047, 1047, 1047, 1047, 1047, 1041, 1041, 1041, 1041, 1041],dtype=int64))
一个天真的解决办法是:
for k in range(len(nozero[0])-1):
i = nozero[0][k]
i2 = nozero[0][k+1]
j = nozero[1][k]
j2 = nozero[1][k+1]
if i != i2:
x.append(i)
y.append(j)
随意建议我任何事情这一点,但如果你有更好的想法来组织数据! (或者如果你想要更好的解释)。
非常感谢!
保持其来自第二列坐标和数组(示出了[861,861,861,861,1047,1047,1047,1047,1047,1041,1041,1041,1041,1041],dtype = int64)。目前还不清楚你想用元组的第二个元素做什么。 BTW元组是不可变的,你不能改变它。所以你必须先将它转换为列表。 – Hun
你应该避免for。正如你所说,如果你的元组在不久的将来会变得更大,那么对所有元素的循环将会被禁止。我会用numpy来完成任务的一部分 – Alejandro
您应该使用更好的示例,或者您的数据总是如此规则。如果你总是有这样的规则模式,那么你可以用k = np.arange(0,len(nozeros [0]),3),然后,x = nozero [0] [ k]和y = nozero [1] [k]。 – Alejandro