关于C++:在这个Python代码中,大于符号意味着什么?

What does the greater-than symbol mean in this piece of python code?

我正在尝试在C++中实现一个受限制的玻尔兹曼机器。我使用这个python代码作为指南:https://github.com/echen/restricted-boltzmann-machines/blob/master/rbm.py

这是第37行:

1
pos_hidden_states = pos_hidden_probs > np.random.rand(num_examples, self.num_hidden + 1)

POSKHIDENDENI状态和POSSHHIDENDENPROFS都是2D矩阵,在C++中是EDCOX1,0的类型,NUMYSUBLE实例和NUMIHOLD都是整数。

有人能解释"大于"符号在这里意味着什么吗?


在EDCOX1中,不容易将numpy转换成C++,在EDCOX1中抽取3。总之,它是一个矢量化比较,因为np.random.rand(...)返回一个np.ndarray,如果pos_hidden_probs是一个标量或np.ndarray它将以矢量化(即元素化)的方式表现:

1
2
3
4
5
6
7
8
>>> rand_array = np.random.rand(2, 2)
>>> rand_array
array([[ 0.1807726 ,  0.67617382],
       [ 0.84396805,  0.04450794]])
>>> 0.5 > rand_array
array([[ True, False],
       [False,  True]], dtype=bool)
>>>

如果pos_hidden_probs是某种np.ndarray,行为可能会受到广播的影响,这是一个麻木的特征:

1
2
3
4
5
6
7
>>> np.array([0.5, 0.5]) > rand_array
array([[ True, False],
       [False,  True]], dtype=bool)
>>> np.array([0.5, .9]) > rand_array
array([[ True,  True],
       [False,  True]], dtype=bool)
>>>

>运算符在numpy中按元素方式工作,例如

1
np.array([[1,2],[3,4]]) > np.array([[2,2],[2,2]])

给你一张12

numpy也做广播,这给不同维度数组之间的比较提供了意义。


>正在将隐藏的prob(在本例中为float)与二维numpy数组中的每个项进行比较,并返回布尔值的二维数组:

1
2
3
4
5
6
7
8
9
>>> import numpy as np
>>> np.random.randn(3,2)array([[-0.74615339, -1.22667606],
       [ 0.22729787,  0.72070398],
       [-1.06876014,  0.06367189]])
>>> 5.  >  np.random.randn(3,2)
array([[ True,  True],
       [ True,  True],
       [ True,  True]], dtype=bool)
>>>

由于操作符重载,>操作符实际上可以做任何事情——它只是在对象上调用__gt__特殊方法。但如果没有任何其他信息,我希望它只评估"大于"并返回bool值。