gpt4 book ai didi

python - 在二维和一维数组之间按元素使用 numpy isin

转载 作者:行者123 更新时间:2023-12-05 00:46:47 26 4
gpt4 key购买 nike

我有一个非常简单的场景,我想测试二维数组的两个元素是否(单独)是更大数组的成员 - 例如:

full_array = np.array(['A','B','C','D','E','F'])
sub_arrays = np.array([['A','C','F'],
['B','C','E']])
np.isin(full_array, sub_arrays)

这给了我一个单维输出:
array([ True,  True,  True, False,  True,  True])

显示 full_array 的元素是否存在于两个子数组中的任何一个中。我想要一个二维数组,为 sub_arrays 中的两个元素中的每一个显示相同的内容 - 所以:
array([[ True,  False,  True, False,  False,  True],
[ False, True, True, False, True, False]])

希望这是有道理的,并感激地收到任何帮助。

最佳答案

基于广播的一
一个简单的方法是使用 broadcasting 在扩展其中一个阵列然后沿各自的轴进行任何减少之后 -

In [140]: (full_array==sub_arrays[...,None]).any(axis=1)
Out[140]:
array([[ True, False, True, False, False, True],
[False, True, True, False, True, False]])
searchsorted 具体案例#1
full_array正在排序和来自 sub_arrays 的所有元素至少出现在 full_array 的某个地方,我们也可以使用 np.searchsorted ——
idx = np.searchsorted(full_array, sub_arrays)
out = np.zeros((sub_arrays.shape[0],len(full_array)),dtype=bool)
np.put_along_axis(out, idx, 1, axis=1)
具体案例#2
full_array正在排序,如果不是来自 sub_arrays 的所有元素保证至少出现在 full_array 的某个地方,我们需要一个额外的步骤 -
idx = np.searchsorted(full_array, sub_arrays)
idx[idx==len(full_array)] = 0
out = np.zeros((sub_arrays.shape[0],len(full_array)),dtype=bool)
np.put_along_axis(out, idx, full_array[idx] == sub_arrays, axis=1)
通用案例
对于 full_array 的真正通用情况不一定要排序,我们需要使用 sorter arg 与 searchsorted ——
def isin2D(full_array, sub_arrays):
out = np.zeros((sub_arrays.shape[0],len(full_array)),dtype=bool)
sidx = full_array.argsort()
idx = np.searchsorted(full_array, sub_arrays, sorter=sidx)
idx[idx==len(full_array)] = 0
idx0 = sidx[idx]
np.put_along_axis(out, idx0, full_array[idx0] == sub_arrays, axis=1)
return out
sample 运行 -
In [214]: full_array
Out[214]: array(['E', 'F', 'A', 'B', 'D', 'C'], dtype='|S1')

In [215]: sub_arrays
Out[215]:
array([['Z', 'C', 'F'],
['B', 'C', 'E']], dtype='|S1')

In [216]: isin2D(full_array, sub_arrays)
Out[216]:
array([[False, True, False, False, False, True],
[ True, False, False, True, False, True]])

关于python - 在二维和一维数组之间按元素使用 numpy isin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53631460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com