矩阵中的元素布尔测试
我需要测试数组中的布尔值,并根据答案对矩阵应用元素操作。我似乎得到了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
专家,对不起,如果这是笨拙的,评论欢迎)
这里你不需要循环。你有一个数组和一个相应的掩码数组。
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
或一个简短的说明
=)是的,我真的应该,不幸的是这是在2天内到期。我在深入没有python exp,并且很少prog exp。是的!创建一个新的阵列是我需要的。谢谢。 –
谢谢,这是伟大的! –