Перевести рубин на питон - PullRequest
3 голосов
/ 26 января 2012

Я переписываю некоторый код с Ruby на Python. Код предназначен для Персептрона , указанного в разделе 8.2.6 Умные алгоритмы: рецепты естественного программирования . Я никогда раньше не использовал Ruby и не понимаю этой части:

def test_weights(weights, domain, num_inputs)
  correct = 0
  domain.each do |pattern|
    input_vector = Array.new(num_inputs) {|k| pattern[k].to_f}
    output = get_output(weights, input_vector)
    correct += 1 if output.round == pattern.last
  end
  return correct
end

Некоторое объяснение: num_inputs - это целое число (2 в моем случае), а domain - это список массивов: [[1,0,1], [0,0,0], etc.]

Я не понимаю эту строку:

input_vector = Array.new(num_inputs) {|k| pattern[k].to_f}

Создает массив с 2 значениями, каждое значение |k| хранит pattern[k].to_f, но что такое pattern[k].to_f?

Ответы [ 3 ]

4 голосов
/ 26 января 2012

Попробуйте это:

input_vector = [float(pattern[i]) for i in range(num_inputs)]
2 голосов
/ 26 января 2012
pattern[k].to_f

конвертирует pattern[k] в число с плавающей запятой.

0 голосов
/ 26 января 2012

Я не эксперт по Ruby, но я думаю, что в Python это будет примерно так:

def test_weights(weights, domain, num_inputs):
    correct = 0
    for pattern in domain:
        output = get_output(weights, pattern[:num_inputs])
        if round(output) == pattern[-1]:
            correct += 1
    return correct

Существует множество возможностей для оптимизации: если num_inputs всегда на единицу меньше, тодлина списков в domain, тогда вам может вообще не понадобиться этот параметр.

Будьте осторожны при построчном переводе с одного языка на другой: это не дает хороших результатов независимо от того, на каких языкахучаствуют.

Редактировать: , так как вы сказали, что не думаете, что вам нужно конвертировать в плавающее число, вы можете просто вырезать необходимое количество элементов из значения домена.Я обновил свой код соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...