我正在尝试用C ++实现一个受限制的boltzmann机器。我使用这个Python代码作为指南: https://github.com/echen/restricted-boltzmann-machines/blob/master/rbm.py
这是第37行:
pos_hidden_states = pos_hidden_probs > np.random.rand(num_examples, self.num_hidden + 1)
pos_hidden_states和pos_hidden_probs都是二维矩阵,C ++中的vector<vector<double>>
类型,num_examples和num_hidden都是整数。
有人能解释一下大于号的含义吗?
答案 0 :(得分:7)
在numpy
中将numpy
翻译成C ++,很多抽象概率可能并不容易。无论如何,它作为矢量化比较,因为np.random.rand(...)
返回np.ndarray
,如果pos_hidden_probs
是标量或np.ndarray
,它将表现为矢量化(即元素)方式:
>>> 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
,则行为可能会受到broadcasting的影响,这是numpy的一项功能:
>>> 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)
>>>
答案 1 :(得分:3)
>
运算符在NumPy中以元素方式工作,例如
np.array([[1,2],[3,4]]) > np.array([[2,2],[2,2]])
为您提供np.array([[False,False],[True,True]])
NumPy也有broadcasting,它为不同维度的数组之间的比较提供了意义。
答案 2 :(得分:2)
&gt;将隐藏的prob(在这种情况下为浮点数)与2d numpy数组中的每个项进行比较,并返回2d布尔值数组:
>>> 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)
>>>
答案 3 :(得分:1)
由于运算符重载,>
运算符几乎可以执行任何操作 - 它只是调用对象上的__gt__
特殊方法。但是,如果没有任何其他信息,我希望它只是评估&#34;大于&#34;并返回bool
值。