根据另一个numpy数组中的值查找numpy数组的索引

沃克

我想在较大的数组中找到索引,如果它们与另一个较小的数组的值匹配。如下new_array所示:

import numpy as np
summed_rows = np.random.randint(low=1, high=14, size=9999)
common_sums = np.array([7,10,13])
new_array = np.where(summed_rows == common_sums)

但是,这返回:

__main__:1: DeprecationWarning: elementwise comparison failed; this will raise an error in the future. 
>>>new_array 
(array([], dtype=int64),)

我得到的最接近的是:

new_array = [np.array(np.where(summed_rows==important_sum)) for important_sum in common_sums[0]]

这给了我一个包含三个numpy数组的列表(每个“重要和”一个),但是每个数组的长度不同,这会导致进一步的级联和vstack下游问题。需要明确的是,我希望使用上面的线。我想使用numpy索引到summed_rows我已经使用numpy.wherenumpy.argwhere来查看各种答案numpy.intersect1d,但是很难将这些想法组合在一起。我发现我缺少一些简单的东西,问起来会更快。

预先感谢您的建议!

伊布拉西

考虑到注释中建议的选项,并在numpy的in1d选项中添加一个额外的选项:

>>> import numpy as np
>>> summed_rows = np.random.randint(low=1, high=14, size=9999)
>>> common_sums = np.array([7,10,13])
>>> ind_1 = (summed_rows==common_sums[:,None]).any(0).nonzero()[0]   # Option of @Brenlla
>>> ind_2 = np.where(summed_rows == common_sums[:, None])[1]   # Option of @Ravi Sharma
>>> ind_3 = np.arange(summed_rows.shape[0])[np.in1d(summed_rows, common_sums)]
>>> ind_4 = np.where(np.in1d(summed_rows, common_sums))[0]
>>> ind_5 = np.where(np.isin(summed_rows, common_sums))[0]   # Option of @jdehesa

>>> np.array_equal(np.sort(ind_1), np.sort(ind_2))
True
>>> np.array_equal(np.sort(ind_1), np.sort(ind_3))
True
>>> np.array_equal(np.sort(ind_1), np.sort(ind_4))
True
>>> np.array_equal(np.sort(ind_1), np.sort(ind_5))
True

如果您计时的话,您会发现它们都很相似,但是@Brenlla的选项是最快的

python -m timeit -s 'import numpy as np; np.random.seed(0); a = np.random.randint(low=1, high=14, size=9999); b = np.array([7,10,13])' 'ind_1 = (a==b[:,None]).any(0).nonzero()[0]'
10000 loops, best of 3: 52.7 usec per loop

python -m timeit -s 'import numpy as np; np.random.seed(0); a = np.random.randint(low=1, high=14, size=9999); b = np.array([7,10,13])' 'ind_2 = np.where(a == b[:, None])[1]'
10000 loops, best of 3: 191 usec per loop

python -m timeit -s 'import numpy as np; np.random.seed(0); a = np.random.randint(low=1, high=14, size=9999); b = np.array([7,10,13])' 'ind_3 = np.arange(a.shape[0])[np.in1d(a, b)]'
10000 loops, best of 3: 103 usec per loop

python -m timeit -s 'import numpy as np; np.random.seed(0); a = np.random.randint(low=1, high=14, size=9999); b = np.array([7,10,13])' 'ind_4 = np.where(np.in1d(a, b))[0]'
10000 loops, best of 3: 63 usec per loo

python -m timeit -s 'import numpy as np; np.random.seed(0); a = np.random.randint(low=1, high=14, size=9999); b = np.array([7,10,13])' 'ind_5 = np.where(np.isin(a, b))[0]'
10000 loops, best of 3: 67.1 usec per loop

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一个数组中的值对numpy数组的选择索引执行操作

根据存储在另一个数组或列表中的索引拆分 numpy 多维数组

根据另一个 numpy 数组的值对一个 numpy 数组中的值进行分组

Python:使用索引的numpy数组从另一个矩阵“查找”值

在numpy中索引另一个数组

numpy:对于一个数组中的每个元素,在另一个数组中查找索引

从另一个未排序的numpy数组中的数据中查找未排序的numpy数组中的值的索引位置

根据另一个数组中的值展开一个numpy数组

如何根据Numpy中另一个数组的分组值生成一个数组?

如何用另一个数组中唯一值的索引替换numpy数组中的重复值?

根据另一个numpy数组中的索引将标量添加到numpy矩阵

用另一个numpy数组中的值替换numpy数组中的值

在另一个二维数组中查找 numpy 二维数组的行索引

如何用另一个数组中找到的值的索引替换Python NumPy数组中的值?

如何用索引将另一个numpy数组中的值替换为另一个数组

numpy数组中的索引,其中另一个数组中的slice

找到一个 numpy 数组中的值落在另一个 numpy 数组中的值之间的位置

查找一个数组与另一个数组中所有值的最接近索引-Python / NumPy

根据另一个数组的样本从numpy数组中获取样本

根据另一个数组替换numpy数组中的数字

用另一个数组的索引来索引一个numpy数组

用另一个包含超出范围的值的数组索引一个numpy数组

numpy-使用值作为另一个数组的索引

numpy设置值,另一个多维数组作为索引

根据另一个numpy数组整理numpy数组的每一行的列

如何根据另一个值在嵌套数组中查找值?

用另一个数组索引一个numpy数组

用另一个数组索引一个numpy数组

映射numpy数组并在另一个数组中的位置上求和值