【发布时间】:2014-01-02 21:23:13
【问题描述】:
好的,我是 Numpy 的新手,但我无法弄清楚这一点,所以把它交给专家。我有一个像下面这样的 2x2 表数组,我想“顺序唯一化”该数组。顺序很重要,因此如果有多个相同的行数组彼此相邻,那么它们是多余的,应该被排除在外(行数组的顺序也很重要,因此 [111,222] 将被视为不同的 [222,111])。以另一种方式构建,我只想保留其左右邻居(或如下所示的顶部/底部)与其自身不同的行数组(在下面的示例中由 * 标记)。
[[[492 105]
[492 105]
[492 105]*
[492 106]*
[492 106]
[492 106]
[491 106]*
[491 106]
[491 105]*
[491 105]
[491 105]
[492 105]*
[492 105]
[492 105]]]
我尝试了 numpy.uniquify 函数,但它并不关心我有一个 2x2 数组的事实,而是在我不想要的平面列表中返回每个子数组中的每个唯一数字,它排序并更改了顺序我也不想要的原始数组。
通过一个简单的 for 循环,我可以很容易地写出它的逻辑,但我需要以 Numpy 的速度对其进行优化。我得到的最接近的是返回一个真值数组,标记左邻居不同的点,这似乎正在工作:
MYARRAY = numpy.matrix( my2x2array )
indexes = numpy.arange(len(MYARRAY))
trutharray = numpy.any(MYARRAY[indexes]!=MYARRAY[indexes-1], 1)
但是,我不确定如何进行以及如何处理真值数组。尝试将真值数组提供给 numpy.extract 函数,但这仅返回每个子数组的平面列表,甚至不返回它应该返回的所有元素;在我的示例中,它返回“[105 492 492 106]”。
有什么帮助吗?如何继续我的示例并最终得到唯一的顺序子数组?或者有没有更快的解决方案来解决这个问题? Numpy 在这个阶段让我很困惑:p
【问题讨论】:
标签: python numpy multidimensional-array unique