Что означает символ «больше» в этом фрагменте кода Python?

Я пытаюсь реализовать ограниченную машину Больцмана в C ++. Я использую этот код 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 являются двухмерными матрицами типа vector<vector<double>> в C ++ и num_examples, и num_hidden являются целыми числами.

Может ли кто-нибудь объяснить, что означает здесь символ «больше»?

2

Решение

Наверное, не легко перевести numpy в C ++, много абстракции в numpy, Во всяком случае, это действует как векторизованное сравнение, потому что 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на поведение может повлиять вещания, особенность 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)
>>>
7

Другие решения

> оператор работает поэлементно в NumPy, например,

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

дает тебе np.array([[False,False],[True,True]])

NumPy также делает вещания, что дает значение для сравнения массивов разных измерений.

3

> Сравнивает скрытый параметр 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)
>>>
2

Из-за перегрузки оператора > Оператор может сделать практически все, что угодно — он просто вызывает __gt__ специальный метод на объекте. Но при отсутствии какой-либо другой информации, я ожидаю, что она просто оценит «больше чем» и вернет bool значение.

1
По вопросам рекламы [email protected]