基于nd数组条件的数组

时间:2019-12-02 23:59:10

标签: python numpy

我正在尝试将numpy数组中的单个列设置为其他两个列的条件(逐元素)。我但似乎不太正确,我尝试了np.wherenp.whichnp.all

我知道我可以使用for循环来做到这一点,但是速度在此任务中很重要,并且希望使用内置的数组函数。

我想将predicted_probabilities[:,1]设置为true(如果已经设置为true),但是如果predicted_probabilities[:,0]predicted_probabilities[:,2]都设置为false,则设置为true

例如:

predicted_probabilities = np.asarray([[True, False, False],
                                      [False, True, False],
                                      [False, False, True],
                                      [False, False, False]])

我希望我的predicted_probabilities最终成为:

[[ True False False]
[False True False]
[False False True]
[False True False]

我尝试过:

predicted_probabilities[:,1] = (predicted_probabilities[:,0] & predicted_probabilities[:,2])

我也尝试过

predicted_probabilities[:,1] = np.where(predicted[:,0]==False & predicted[:,2] == False)

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

使用np.logical_andnp.logical_or可能会有帮助。

import numpy as np

predicted = np.asarray([[True, False, False],
                        [False, True, False],
                        [False, False, True],
                        [False, False, False]])

cond = np.logical_and(predicted[:, 0] == False, predicted[:, 2] == False)
predicted[:, 1] = np.logical_or(predicted[:, 1], cond)

print(predicted)
"""
Prints:
[[ True False False]
 [False  True False]
 [False False  True]
 [False  True False]]
"""