Как преобразовать этот код, основанный на списках, в код, основанный на пустых массивах? - PullRequest
1 голос
/ 24 марта 2019

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

output_sentence = []
final_output_sentence = []

for key in row['o'].lower():

    temp_list = []

    if key in dictionary.keys():

        temp_list.append(dictionary[key])
        output_sentence.append(temp_list)

    else:

        dictionary[key] = len(dictionary)
        temp_list.append(dictionary[key])
        output_sentence.append(temp_list)

final_output_sentence.append(output_sentence)

к коду на основе массивов Я пытаюсь таким образом:

output_sentence = np.array([], dtype=int)
final_output_sentence = np.array([], dtype=int)

for key in row['o'].lower():

    temp_list = np.array([], dtype=int)

    if key in dictionary.keys():

        temp_list = np.append(temp_list, dictionary[key])

        output_sentence = np.append(output_sentence, temp_list)

    else:

        dictionary[key] = len(dictionary)
        temp_list = np.append(temp_list, dictionary[key])
        output_sentence = np.append(output_sentence, temp_list)

final_output_sentence = np.append(final_output_sentence, output_sentence)

однако вместо этого [[[1], [2], [3], [2], [4]]] я получаю это [1 2 3 2 4]. Есть идеи как это решить?

UPDATE

Что вы думаете о решении, показанном ниже? Любые советы по оптимизации производительности?

output_sentence = []

for key in row['o'].lower():

    temp_list = []

    if key in dictionary.keys():

        temp_list.append(dictionary[key])
        output_sentence.append(temp_list)

    else:

        dictionary[key] = len(dictionary)
        temp_list.append(dictionary[key])
        output_sentence.append(temp_list)

final_output_sentence = np.array(output_sentence)

final_output_sentence = final_output_sentence.reshape(1, final_output_sentence.shape[0], 1)

1 Ответ

1 голос
/ 24 марта 2019
output_sentence = []
for key in row['o'].lower():
    if key not in dictionary.keys():
        dictionary[key] = len(dictionary)
    output_sentence.append(dictionary[key])

final_output_sentence = np.array(output_sentence).reshape(1,-1,1)
  • Если key не существует в словаре, добавьте его со следующим размером
  • Добавьте значение, соответствующее ключу, в output_sentence
  • Наконец, output_sentence - это список, но, так как вам нужен трехмерный массив, преобразуйте его в массив и измените его форму.
  • x.reshape (1, -1,1) => изменить форму x таким образом, что размер 0-й оси равен 1, размер 2-й оси равен 1, а размер 1-й оси будет таким же, как элементы в x.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...