【发布时间】:2022-01-16 00:28:14
【问题描述】:
我正在编写一些代码来按向量之间的角度对向量进行分组。例如,我可能有一个向量数组:
vectors = np.array([[1, 0, 0], [1.1, 0, 0], [0, 2, 2]])
例如,可接受的角度偏差为 0.1 弧度。目前,我正在像这样的 while 循环中执行此操作:
groups = []
while not vectors.size == 0:
vector = vectors[0]
angles = (vectors @ vector)/(np.linalg.norm(vector, axis=1))
angles = np.arccos(angles/np.linalg.norm(vector))
group = vectors[angles <= angle]
groups.append(group)
vectors = vectors[angles > angle]
return np.array(groups)
我希望这会返回一个具有以下形式的 numpy 数组:
expected_array = np.array([[[1, 0, 0], [1.1, 0, 0]], [[0, 2, 2]]])
但我得到以下信息:
actual_array = np.array([array([[1. , 0. , 0. ], [1.1, 0. , 0. ]]),
array([[0. , 2, 2]])])
为什么 Numpy 没有注意到列表包含数组并给出我期望的结果?有没有办法让 Numpy 注意到这一点?还是您总是必须使用 np.concatenate 或类似的东西才能获得所需的结果?
【问题讨论】:
-
数组和列表真的有区别吗?有什么你不能做的吗?
-
看起来数组列表可能是最适合您的用例的数据结构。您想要的输出似乎丢弃了作为代码全部目的的分组信息。
-
np.arraycan't read your mind` 问题在于你的期望。但是np.vstack(groups)可能会做你想做的事。 -
@user2357112supportsMonica 我认为您实际上可能是对的,但我仍然对如何达到预期结果感兴趣。如果只是为了知道将来该怎么做。它并没有真正破坏我的分组,它只是让使用数组变得更加困难,但也许还有速度的额外好处?
-
@Chris 对于一个小的用例,不,它没有区别,实际上可能是有益的。但我想我在想,如果我有数百万个向量,我指定的形式的返回数组对于未来的计算是否会更快。比如说矢量比较。
标签: python arrays python-3.x list numpy