Python 使用具有多个值的索引,如何获取最小值
我有一个从一个数组中选择元素的索引。但有时索引可能有重复的条目。。。在这种情况下,我想选择相应的较小值。可能吗Python 使用具有多个值的索引,如何获取最小值,python,numpy,Python,Numpy,我有一个从一个数组中选择元素的索引。但有时索引可能有重复的条目。。。在这种情况下,我想选择相应的较小值。可能吗 index = [0,3,5,5] dist = [1,1,1,3] arr = np.zeros(6) arr[index] = dist print arr 我得到的是: [ 1. 0. 0. 1. 0. 3.] 我想要的是: [ 1. 0. 0. 1. 0. 1.] [[ 0. 1.] [ 0. 0.] [ 0. 0.] [ 2. 3.]
index = [0,3,5,5]
dist = [1,1,1,3]
arr = np.zeros(6)
arr[index] = dist
print arr
我得到的是:
[ 1. 0. 0. 1. 0. 3.]
我想要的是:
[ 1. 0. 0. 1. 0. 1.]
[[ 0. 1.]
[ 0. 0.]
[ 0. 0.]
[ 2. 3.]
[ 0. 0.]
[ 4. 5.]]
附录
实际上,我有第三个数组,其中包含要插入的(向量)值。因此,问题是将
值
中的值插入arr
的索引
位置,如下所示。但是,当多个值具有相同的索引时,我想选择与minimumdist
对应的值
index = [0,3,5,5]
dist = [1,1,1,3]
values = np.arange(8).reshape(4,2)
arr = np.zeros((6,2))
arr[index] = values
print arr
我得到:
[[ 0. 1.]
[ 0. 0.]
[ 0. 0.]
[ 2. 3.]
[ 0. 0.]
[ 6. 7.]]
我想得到:
[ 1. 0. 0. 1. 0. 1.]
[[ 0. 1.]
[ 0. 0.]
[ 0. 0.]
[ 2. 3.]
[ 0. 0.]
[ 4. 5.]]
在熊猫中使用
groupby
:
import pandas as pd
index = [0,3,5,5]
dist = [1,1,1,3]
s = pd.Series(dist).groupby(index).min()
arr = np.zeros(6)
arr[s.index] = s.values
print arr
如果对
index
进行排序,则可以使用itertools.groupby
对该列表进行分组
np.array([(g[0],min([x[1] for x in g[1]])) for g in
itertools.groupby(zip(index,dist),lambda x:x[0])])
产生
array([[0, 1],
[3, 1],
[5, 1]])
这比使用
np.unique
的版本慢约8倍。因此,对于N=1000
来说,它与Pandas版本类似(我猜是因为我的Pandas导入有问题)。对于较大的N,熊猫版本更好。看起来熊猫的方法有着巨大的启动成本,这限制了它在小N的速度。你的标题中“最近”是什么意思?您想要给定索引中的最小值,还是其他什么?我想说“最小”,但由于某种原因,stackoverflow认为标题无效:-(dist如何影响附录中的情况?我的解释:“对于索引中的重复数字
,请选择值
中与距离
中最小数字对应的行。是否正确?如果您希望重复索引的值
中的“最小”值,则它是不明确的(如果说值
中的两行是[0,2]
和[1,1]
)您的解释是正确的。我想插入dist
中的值,如果多个值具有相同的索引,则选择dist
最小的值。我想,您想插入值中的值。我的解决方案应该针对2d值执行此操作,方法是根据dist
进行排序实际上,我有第三个值数组…你能根据我问题中的附录调整你的答案吗?对不起,我不知道为什么我的附录丢失了…现在你应该用样本数据找到它。我用这个问题解决了附录部分:是的,我也发现了时间安排,我认为制作一个系列
一定很昂贵。