在此代码中使用的运算符==和*是什么?

时间:2018-03-08 23:58:43

标签: python numpy operators

我需要在以下python代码片段中理解运算符的用法。我不熟悉np.zeros()语句中*的用法。它看起来像c中的指针解引用运算符,但我猜不是。

另外,赋值语句中==的用法是什么?这看起来像是一个相等测试,但TrueFalse不是numpy数组的有效索引。

new_segs = np.zeros((*raw_segs.shape, 3), dtype=np.uint8)
i = 0
for val in [x['handle'] for x in detections]:
    colors = [(255,0,255), (55,0,55), (34,33,87)]
    new_segs[raw_segs == val] = colors[i % len(colors)]

抱歉这个糟糕的问题。尝试过寻找答案,但我对搜索操作员的使用情况得到了不满意的答案。

3 个答案:

答案 0 :(得分:4)

解释了明星*解包。 numpy中的==boolean mask。您传递的数组应该与另一个numpy数组的大小相同,但这会告诉它要包含哪些数组元素。

答案 1 :(得分:2)

明星*是解包运营商;它将raw_segs.shape扩展为值元组。

您对索引不正确:TrueFalse有效,分别被解释为1和0。试试吧,看看:

>>> new_segs = np.array((3.3, 4.4))
>>> new_segs[0]
3.2999999999999998
>>> new_segs[True]
4.4000000000000004
>>> 

答案 2 :(得分:1)

*解包shape元组,允许它与3连接以形成更大的形状元组:

In [26]: x = np.zeros((2,3))
In [28]: y = np.zeros((*x.shape, 3))
In [29]: y.shape
Out[29]: (2, 3, 3)

另一种方法:

In [30]: y = np.zeros(x.shape+(3,))
In [31]: y.shape
Out[31]: (2, 3, 3)

In [32]: i,j = x.shape
In [33]: y = np.zeros((i,j,3))
In [34]: y.shape
Out[34]: (2, 3, 3)