【发布时间】:2023-03-28 18:25:01
【问题描述】:
我有一个二维ndarray,应扫描其中的行以检查是否有任何一个等于任何其他。
我的第一次尝试确实有效,但我觉得这不是最佳方式。一旦矩阵中的行数接近1000,就需要时间。
我的代码如下。 X 是前面提到的数组,Y 也是一个二维的ndarray。
for i in range(X.shape[0]-1):
for j in range(i+1,X.shape[0]):
if (np.all( (X[i,:] == X[j,:] ), axis = 0 )):
Y[j,:] = Y[i,:]
#endif
#enddo
#enddo
我知道嵌套循环很耗时,应该避免,但我找不到替代方法。列表理解在我看来并不合适,因为不需要保存项目。
该过程的核心是赋值操作Y[j,:] = Y[i,:],它依赖于索引,这将导致我排除类似列表理解的解决方案。
问题然后是:有没有更有效的方法来编写利用numpy 向量化的搜索?
【问题讨论】:
-
输入数组
X的典型形状是什么? -
@Divakar
X被认为是一个合成数据集。理想情况下,我会使用(1000,8)的形状,甚至可能会有更多行
标签: python python-3.x numpy vectorization