Python 基于其他数组的x个数切片numpy数组
我正在努力使我当前的代码动态化。这意味着无论用户的阵列输入数量如何,它都应该能够进行调整 当前代码:Python 基于其他数组的x个数切片numpy数组,python,arrays,numpy,slice,Python,Arrays,Numpy,Slice,我正在努力使我当前的代码动态化。这意味着无论用户的阵列输入数量如何,它都应该能够进行调整 当前代码: main1 = numpy.array([1,2,3,4]) array1 = numpy.array(['a','b','c','b']) my_list1 = ['a','b'] array2 = numpy.array(['cat','dog','bird','cat']) my_list2 = ['cat'] result_array = main1[np.in1d(array1, m
main1 = numpy.array([1,2,3,4])
array1 = numpy.array(['a','b','c','b'])
my_list1 = ['a','b']
array2 = numpy.array(['cat','dog','bird','cat'])
my_list2 = ['cat']
result_array = main1[np.in1d(array1, my_list1) and np.in1d(array2, my_list2)]
打印出result\u array
的理想结果是:
array([1, 4])
这是因为a
和cat&b
和cat
的交叉点
我的目标是能够使用n个array1
,array2
。。。和n个我的列表1
,我的列表2
提前谢谢 两个以上阵列的版本,使用
逻辑\u和.reduce
:
array3 = numpy.array(['cat3','dog3','bird3','cat3'])
my_list3 = ['cat3']
my_arrays = [array1, array2, array3]
my_lists = [my_list1, my_list2, my_list3]
res1 = main1[numpy.logical_and.reduce(tuple(np.in1d(array, lst) for
array, lst in zip(my_arrays, my_lists)))]
测试它:
res2 = main1[np.in1d(array1, my_list1) & np.in1d(array2, my_list2) &
np.in1d(array3, my_list3)]
看起来不错:
>>> np.all(res1 == res2)
True
旧答案只有两个数组
这应该起作用:
my_arrays = [array1, array2]
my_lists = [my_list1, my_list2]
main1[np.logical_and(*(np.in1d(array, lst) for array, lst in zip(my_arrays, my_lists)))]
结果:
array([1, 4])
很好用!谢谢!你好我认为它使用三个数组和三个列表,但显然它最多只考虑第二对数组列表。我们如何使NP-逻辑和考虑超过2个参数?