我需要在以下python代码片段中理解运算符的用法。我不熟悉np.zeros()语句中*的用法。它看起来像c中的指针解引用运算符,但我猜不是。
另外,赋值语句中==
的用法是什么?这看起来像是一个相等测试,但True
和False
不是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)]
抱歉这个糟糕的问题。尝试过寻找答案,但我对搜索操作员的使用情况得到了不满意的答案。
答案 0 :(得分:4)
解释了明星*
解包。 numpy中的==
是boolean mask。您传递的数组应该与另一个numpy数组的大小相同,但这会告诉它要包含哪些数组元素。
答案 1 :(得分:2)
明星*
是解包运营商;它将raw_segs.shape
扩展为值元组。
您对索引不正确:True
和False
有效,分别被解释为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)