【发布时间】:2016-10-20 14:52:37
【问题描述】:
以下函数旨在查找数组的唯一行:
def unique_rows(a):
b = np.ascontiguousarray(a).view(np.dtype((np.void, a.dtype.itemsize * a.shape[1])))
_, idx = np.unique(b, return_index=True)
unique_a = a[idx]
return unique_a
例如,
test = np.array([[1,0,1],[1,1,1],[1,0,1]])
unique_rows(test)
[[1,0,1],[1,1,1]]
我相信这个功能应该一直有效,但它可能不是无懈可击的。在我的代码中,我想计算一组粒子存在多少个唯一位置。粒子存储在一个二维数组中,每一行对应一个粒子的位置。这些位置的类型为 np.float64。 我还定义了以下函数
def pos_tag(pos):
x,y,z = pos[:,0],pos[:,1],pos[:,2]
return (2**x)*(3**y)*(5**z)
原则上,此函数应为任何 (x,y,z) 位置生成唯一值。
但是,当我使用这些函数来计算我的一组粒子中唯一位置的数量时,它们会产生不同的答案。这是由于第一个函数中可能存在一些逻辑缺陷,还是第二个函数没有为每个给定位置生成唯一值?
编辑:使用示例
我有一些长代码可以生成二维粒子位置数组。
partpos.shape = (6039539,3)
然后我按如下方式计算唯一行数
len(unqiue_rows(partpos))
6034411
和
posids = pos_tag(partpos)
len(np.unique(posids))
5328871
【问题讨论】:
-
你的位置浮动吗?
-
你能举一个你没有得到预期结果的例子吗?
-
您能否详细解释一下您是如何使用第二个函数来确定唯一位置的数量的?
-
对不起,不清楚,我实际上将partpos定义为粒子的位置,它有3列,而不是4列。
-
请注意,链接的问题是在谈论整数,而不是浮点数。发生碰撞的概率仍然很低,但不等于零。
标签: python arrays function numpy