Python:将两个数组作为函数参数传递。应为一个系列,但仅返回最后一个值

Python:将两个数组作为函数参数传递。应为一个系列,但仅返回最后一个值,python,arrays,python-3.x,pandas,numpy,Python,Arrays,Python 3.x,Pandas,Numpy,我相信还有其他的方法可以做到这一点,但我希望了解为什么我会得到这样的结果 对于添加的上下文,我正在尝试学习python中的矢量化,我遇到了一些教程,这些教程显示传递数组比使用.apply()方法更快 目的:比较两个布尔数组,并基于多个条件,返回一个结果,该结果也应该是一个序列 但是,执行以下操作时,我只得到最后一个组合的值,而不是一系列结果 bool_1 = np.array([True,False,False]) bool_2 = np.array([False,True,False]) #

我相信还有其他的方法可以做到这一点,但我希望了解为什么我会得到这样的结果

对于添加的上下文,我正在尝试学习python中的矢量化,我遇到了一些教程,这些教程显示传递数组比使用.apply()方法更快

目的:比较两个布尔数组,并基于多个条件,返回一个结果,该结果也应该是一个序列

但是,执行以下操作时,我只得到最后一个组合的值,而不是一系列结果

bool_1 = np.array([True,False,False])
bool_2 = np.array([False,True,False])

# Categorise the outcomes


def bool_combinations(bool_array_1,bool_array_2):
    
    if bool_array_1 is True:
        OUTCOME = "Outcome 1"
    
    elif bool_array_2 is True:
        OUTCOME = "Outcome 2"
    
    else:
        OUTCOME = "Outcome 3"
    
    print(bool_array_1,bool_array_2,OUTCOME)
    return OUTCOME
   
    
bool_combinations(bool_1,bool_2)
从上面我得到了以下结果:

[ True False False] [False  True False] Outcome 3
'Outcome 3'
我希望得到的结果更像:

[ True False False] [False  True False] [ 'Outcome 1' 'Outcome 2' 'Outcome 3']
[ 'Outcome 1' 'Outcome 2' 'Outcome 3']

您很接近,但是您可能希望将数组压缩在一起并逐个元素进行比较,而不是比较数组的真实性。您获得“结果3”的原因是:

使用您的代码作为基础,您可以尝试:

import numpy

def bool_combinations(bool_array_1,bool_array_2):
    OUTCOME = []
    for (bool1, bool2) in zip(bool_array_1,bool_array_2):
        if bool1:
            OUTCOME.append("Outcome 1")
        elif bool2:
            OUTCOME.append("Outcome 2")
        else:
            OUTCOME.append("Outcome 3")
    return OUTCOME

bool_1 = numpy.array([True,False,False])
bool_2 = numpy.array([False,True,False])
print(bool_combinations(bool_1,bool_2))
这将给你:

['Outcome 1', 'Outcome 2', 'Outcome 3']
['Outcome 1', 'Outcome 2', 'Outcome 3']
我个人可能会:

import numpy

def bool_combinations(bool_array_1,bool_array_2):
    def _get_outcome(bool1, bool2):
        if bool1: return "Outcome 1"
        if bool2: return "Outcome 2"
        return "Outcome 3"

    return [_get_outcome(bool1, bool2) for bool1, bool2 in zip(bool_array_1,bool_array_2)]

bool_1 = numpy.array([True,False,False])
bool_2 = numpy.array([False,True,False])
print(bool_combinations(bool_1,bool_2))
这也将给你:

['Outcome 1', 'Outcome 2', 'Outcome 3']
['Outcome 1', 'Outcome 2', 'Outcome 3']

您仍然可以使用golfier,但我不认为缩短它会使代码更容易理解。

您想迭代这些数组并测试元素吗?@JonSG是的,理想情况下我将迭代这两个数组。。。i、 e.对于第一次迭代,它将比较bool_1=True和bool_2=False。当Bool_1为真时,如果我使用“==”的话,结果应该是“结果1”@Forensic_07,我得到了这个错误:“ValueError:一个数组中有多个元素的真值是不明确的。使用a.any()或a.all()”真和假的列表对你来说是什么意思?@Stefan我想看看这两个数组中的每个元素,而不是整个列表。所以数组1的第一个值和数组2的第一个值。。。然后移动到第二个值等。