【发布时间】:2019-07-11 00:35:50
【问题描述】:
具有以下距离矩阵dist:
dist = [[[ 0, 0],
[ 5, 0],
[ 1, 0],
[ 1, 1],
[11, 3],
[ 3, 6],
[ 5, 5]],
[[ 5, 0],
[ 0, 0],
[ 6, 0],
[ 4, 1],
[ 6, 3],
[ 2, 6],
[10, 5]],
[[ 1, 0],
[ 6, 0],
[ 0, 0],
[ 2, 1],
[12, 3],
[ 4, 6],
[ 4, 5]],
[[ 1, 1],
[ 4, 1],
[ 2, 1],
[ 0, 0],
[10, 2],
[ 2, 7],
[ 6, 6]],
[[11, 3],
[ 6, 3],
[12, 3],
[10, 2],
[ 0, 0],
[ 8, 9],
[16, 8]],
[[ 3, 6],
[ 2, 6],
[ 4, 6],
[ 2, 7],
[ 8, 9],
[ 0, 0],
[ 8, 1]],
[[ 5, 5],
[10, 5],
[ 4, 5],
[ 6, 6],
[16, 8],
[ 8, 1],
[ 0, 0]]]
我需要使用AND 构建一个generator expression,条件如下:
gexp = (dist[:, :, 0] <= 1) & (dist[:, :, 1] <= 2)
意味着当两个条件都成立时(对于第 0 列和第 1 列),我想要一个值 True,如下所示(我将其打印到列表理解语法):
[array([[ True, False, True, True, False, False, False],
[False, True, False, False, False, False, False],
[ True, False, True, False, False, False, False],
[ True, False, False, True, False, False, False],
[False, False, False, False, True, False, False],
[False, False, False, False, False, True, False],
[False, False, False, False, False, False, True]])]
我有这个列列表:
columns = ['weight', 'height']
他们的门槛:
thresholds = {'weight': 1.0, 'height': 1.0}
及其对应的索引:
indexes = {'weight': 0, 'height': 1}
我尝试以这种方式构建我的生成器表达式:
dynamic_gexpr = [dist[:,:,indexes.get(column)] <= thresholds.get(column) for column in columns]
但我不知道如何在一列和另一列之间添加 AND 条件。上面的表达式似乎更像是 OR 条件来处理它,给出以下输出:
[array([[ True, False, True, True, False, False, False],
[False, True, False, False, False, False, False],
[ True, False, True, False, False, False, False],
[ True, False, False, True, False, False, False],
[False, False, False, False, True, False, False],
[False, False, False, False, False, True, False],
[False, False, False, False, False, False, True]]), array([[ True, True, True, True, False, False, False],
[ True, True, True, True, False, False, False],
[ True, True, True, True, False, False, False],
[ True, True, True, True, False, False, False],
[False, False, False, False, True, False, False],
[False, False, False, False, False, True, True],
[False, False, False, False, False, True, True]])]
【问题讨论】:
-
你能分享一个更可复制粘贴的ndarray吗? :-)(一个简单的打印就可以了)
-
使用
numpy,您可以这样做:l2 = np.array(l)和l3 = (l2[:, :, 0] <= 1) & (l2[:, :, 1] <= 2)。不确定我是否正确理解了您的问题。 -
@yatu 现在已经被编辑了,我不知道为什么打印时没有逗号。
-
@Jeppe 我需要在运行时使用列、索引和阈值中的值构建这个表达式。
标签: python generator generator-expression