我试着从numpy数组中获取索引值,我试着使用intersects而不是无效的。我只是想在两个数组中找到相似的值。一个是2D,我选择了一个列,另一个是1D,只是一个要搜索的值列表,所以实际上只有2个1D数组。
我们将此数组称为:
array([[ 1, 97553, 1],
[ 1, 97587, 1],
[ 1, 97612, 1],
[ 1, 97697, 1],
[ 1, 97826, 3],
[ 1, 97832, 1],
[ 1, 97839, 1],
[ 1, 97887, 1],
[ 1, 97944, 1],
[ 1, 97955, 2]])
我们搜索说,values = numpy.array([97612, 97633, 97697, 97999, 97943, 97944])
所以我试着:
numpy.where(a[:, 1] == values)
我希望有一堆值的索引,但是我得到的是一个空数组,它会弹出[(array([], dtype=int64),)]
。
如果我试试这个:
numpy.where(a[:, 1] == 97697)
它还给了我(array([2]),)
,这是我所期望的。
我这里少了什么奇怪的数组?或者有更简单的方法来做这个吗?查找数组索引和匹配数组似乎根本没有我所期望的那样工作。当我想通过indice或unique值找到数组的并集或交集时,它似乎不起作用。任何帮助都是很好的。谢谢。
编辑: 根据沃伦的要求:
import numpy
a = numpy.array([[ 1, 97553, 1],
[ 1, 97587, 1],
[ 1, 97612, 1],
[ 1, 97697, 1],
[ 1, 97826, 3],
[ 1, 97832, 1],
[ 1, 97839, 1],
[ 1, 97887, 1],
[ 1, 97944, 1],
[ 1, 97955, 2]])
values = numpy.array([97612, 97633, 97697, 97999, 97943, 97944])
我发现numpy.in1d
将为操作提供一个正确的布尔值真值表,其1d数组的长度应与原始数据相同。我现在唯一的问题是如何处理这个问题,例如删除或修改这些索引处的原始数组。我可以用一个循环费力地完成它,但据我所知,在numpy有更好的方法。作为面具的真相表应该是非常强大的,从我所能找到的努比。
只是一个想法:
尝试展平二维数组并使用numpy.intersect1d进行比较
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.ndarray.flatten.html
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.intersect1d.html
带有单个参数的^{} 等价于^{} 。它提供了条件input数组是
True
的索引。在您的示例中,您正在检查
a[:,1]
和values
之间的元素相等性所以它给出了正确的结果:输入中没有索引是
True
。您应该改用^{}
现在可以使用^{} 获取索引
并使用这些来处理原始数组
通过简单的等式检查,您的初始解决方案确实可以使用正确的^{} :
编辑:如果您在使用上述结果索引和操作数组时遇到问题,这里有几个简单的示例
现在您应该有两种方法来访问原始数组中的匹配元素,二进制掩码或
np.where
中的索引。假设要将所有匹配行设置为零
或者将匹配行的第三列乘以
100
或者您想删除匹配的行(这里使用索引比掩码更方便)
相关问题 更多 >
编程相关推荐