【发布时间】:2014-03-23 05:01:13
【问题描述】:
这类似于this 问题,只是我有一个更严格的条件:我需要替换整行的出现,而不仅仅是可能存在于列中其他位置的值。第 368 行应该可以说明到目前为止有多少花式索引的实验失败了:
In [368]:
a=np.array([[[ 42.30803907, 0. , 0. ],
[ 42.30803907, 3.0052592 , 0. ]],
[[ 42.30803907, 3.0052592 , 0. ],
[ 40.54907736, 5.44198582, 0. ]],
[[ 40.54907736, 5.44198582, 0. ],
[ 42.14713681, 8.84169967, 0. ]]])
In [369]:
toBeReplaced=np.array([ 42.30803907, 3.0052592 , 0. ])
In [370]:
b=a==toBeReplaced
#b returns:
#array([[[ True, False, True],
# [ True, True, True]],
#
# [[ True, True, True],
# [False, False, True]],
#
# [[False, False, True],
# [False, False, True]]], dtype=bool)
这就是我似乎无法正确理解条件语法的地方:
a=np.where(b==[True,True,True], [9,9,9], a)
Out[373]:
array([[[ 9. , 0. , 9. ],
[ 9. , 9. , 9. ]],
[[ 9. , 9. , 9. ],
[ 40.54907736, 5.44198582, 9. ]],
[[ 40.54907736, 5.44198582, 9. ],
[ 42.14713681, 8.84169967, 9. ]]])
您可以看到,布尔掩码以列为基础替换了所有匹配项。有没有办法改变布尔掩码或它用作选择器的数组,以便只有所有三列中的值与搜索数组的列匹配的行?
(请注意,虽然我的数据是 float64,但我正在寻找的所有“匹配”事件在 np.all() 上都返回 True,因为它们是相同的基础计算值。)
【问题讨论】: