矩阵中的元素布尔测试

问题描述:

我需要测试数组中的布尔值,并根据答案对矩阵应用元素操作。我似乎得到了ROW的布尔答案,而不是个别元素本身。我如何测试并获得每个单独元素的答案?矩阵中的元素布尔测试

我有概率

probs = np.array([[0.1, 0.2, 0.3, 0.3, 0.7], 
        [0.1, 0.2, 0.3, 0.3, 0.7], 
        [0.7, 0.2, 0.6, 0.1, 0.0]]) 

的矩阵和测试阵列

tst = ([False, False, True, True, False], 
     [True, False, True, False, False], 
     ) 
t = np.asarray(tst).astype('bool') 

的矩阵和的我写输出该应答码本段,但很明显测试整个行,因为一切都是错误的。

for row in tst: 
    mat = [] 
    for row1 in probs: 
     temp = [] 
     if row == True: 
      temp.append(row1) 
     else: temp.append(row1-1) 
     mat.append(temp) 

mat 
Out[42]: 
[[array([-0.9, -0.8, -0.7, -0.7, -0.3])], 
[array([-0.9, -0.8, -0.7, -0.7, -0.3])], 
[array([-0.3, -0.8, -0.4, -0.9, -1. ])]] 

我需要的新的矩阵是

[[-0.9, -0.8, 0.3, 0.3, -0.3], 
[-0.9, -0.8, 0.3, 0.3, -0.3], 
[-0.3, -0.8, 0.6, 0.1, -1] 

在TST的第一阵列。非常感谢您的帮助!

您需要保留值,如果是测试True和1。减去否则

因为你比较的布尔列表您的循环不起作用。之后,你将加上整行减1(减1到所有元素)

我的解决方案:减去布尔行的值行,但倒置真和假(如果真,不要减,如果假,。减去):

for row in tst: 
    mat = [] 
    for row1 in probs: 
     mat.append(row1-[not v for v in row]) 

    print(np.asarray(mat)) 

打印(每次迭代)(注意,你有2个结果,因为你用相结合的矩阵2个真值表):

[[-0.9 -0.8 0.3 0.3 -0.3] 
[-0.9 -0.8 0.3 0.3 -0.3] 
[-0.3 -0.8 0.6 0.1 -1. ]] 
[[ 0.1 -0.8 0.3 -0.7 -0.3] 
[ 0.1 -0.8 0.3 -0.7 -0.3] 
[ 0.7 -0.8 0.6 -0.9 -1. ]] 

(我不是一个numpy专家,对不起,如果这是笨拙的,评论欢迎)

+0

谢谢,这是伟大的! –

这里你不需要循环。你有一个数组和一个相应的掩码数组。

probs[np.invert(tst)]-=1. 

该面具会让你回到真正的价值。你不想错误的值,所以反转tst数组。

# This would be a longer version, if you are not familiar with the synthax above 
probs[np.invert(tst)]=probs[np.invert(tst)]-1. 

如果你想创建一个新的numpy的阵列(你在代码中创建numpy的阵列的列表),它会工作,例如这种方式。

# copy the numpy array 
mat=np.copy(probs) 
mat[np.invert(tst)]=probs[np.invert(tst)]-1 

我建议你先看看一个视图初学者教程,如果你知道,例如列表和numpy的阵列,以及如何处理它们之间的差别编程会容易得多。

https://www.scipy.org/scipylib/faq.html#what-advantages-do-numpy-arrays-offer-over-nested-python-lists https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

或一个简短的说明

Python List vs. Array - when to use?

+0

=)是的,我真的应该,不幸的是这是在2天内到期。我在深入没有python exp,并且很少prog exp。是的!创建一个新的阵列是我需要的。谢谢。 –