Функция Python возвращает заполненный массив, но count равен 0 - PullRequest
0 голосов
/ 04 ноября 2018

Я застрял с проблемой. Я вызываю функцию самостоятельной сборки в Python. В функции я возвращаю массив. Я мог бы лучше показать код, потому что его трудно объяснить. Вот код:

x = []
y = []

for seq, target in sequential_data:
    x.append(seq)
    y.append(target)

return np.array(x), y

Итак, данные x выглядят так:

array([[-6.32800918e-01,  2.89825783e+00, -1.73310681e-01,
    -4.15661278e-01, -9.33079353e-02, -4.58912725e-01],
   [ 1.07589222e+00, -3.94481134e-01, -1.95411356e+00,
     3.33890284e-01,  8.47644383e-01,  3.54376319e+00],
   [-2.83976404e-02, -4.19161683e-01,  2.38210386e-01,
    -3.94514913e-01, -6.06152332e-01, -9.27321083e-01]]), array([[ 0.09504018, -0.12478065, -0.84749427, -0.41267553,  0.03296391,
    -0.31431189],
   [ 1.48297783,  0.45790544,  1.72273948,  0.71392208,  0.1164553 ,
     1.24876302],
   [-1.54352725,  0.06401262, -0.44148997, -0.36444495,  0.2416613 ,
    -0.6424675 ],
   [ 0.62600517, -0.36715788,  0.09876015, -0.30232469,  0.82585385,
    -0.96059436]])

А у выглядит так:

[0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0]

Эти данные возвращаются функцией. Поэтому я пытаюсь назначить имя переменной для массива x и имя переменной для массива y. Я попробовал это так:

validation_x, validation_y = function(Input)

Вход имеет правильное значение, так что это не проблема. Но когда я делаю len(validation_x), он возвращает 0. То же самое для validation_y. Так что я делаю не так?

ПОЛНАЯ ФУНКЦИЯ:

def preprocess_df(df):
    for i in df.values:
        prev_days.append([n for n in i[:-1]])
        if len(prev_days) == SEQ_LEN:
            sequential_data.append([np.array(prev_days), i[-1]])

    random.shuffle(sequential_data)

    buys = []
    sells = []

    for seq, target in sequential_data:
        if target == 0:
            sells.append([seq, target])
        elif target == 1:
            buys.append([seq, target])

    random.shuffle(buys)
    random.shuffle(sells)

    lower = min(len(buys), len(sells))


    buys = buys[:lower]
    sells = sells[:lower]


    sequential_data = buys+sells

    random.shuffle(sequential_data)

    x = []
    y = []

    for seq, target in sequential_data:
        x.append(seq)
        y.append(target)

    return np.array(x), y

ПОЛНЫЙ ФУНКЦИОНАЛЬНЫЙ ВЫЗОВ:

times = sorted(main_df.index.values)
last_5pct = times[-int(0.05*len(times))]

validation_main_df = main_df[(main_df.index >= last_5pct)]
main_df = main_df[(main_df.index < last_5pct)]

train_x, train_y = preprocess_df(main_df)
validation_x, validation_y = preprocess_df(validation_main_df)

print("train data: " + str(len(train_x)) + ", validation: " + str(len(validation_x)))

VARIABLE: Validation_main_df

1535824320        7195.99          163110          66.58            1564         297.24           96361      1
1535824380        7197.00          118069          66.71            1924         297.18          125395      0
1535824440        7190.00          189429          66.65            6147         297.13           89798      0
1535824500        7192.20           69587          66.65            9680         297.24           70676      0
1535824560        7193.99           76146          66.59            5012         297.37           44880      0
1535824620        7193.38           59251          66.54           16273         297.37          101982      0
1535824680        7194.00          186177          66.59            4778         297.33           77169      0

1 Ответ

0 голосов
/ 04 ноября 2018

С указанными вами подробностями я не могу воспроизвести эту проблему:

import numpy as np


def function(sequential_data):

    x = []
    y = []

    for seq, target in sequential_data:
        x.append(seq)
        y.append(target)

    return np.array(x), y


Input = [[1, [1, 2, 3]], [2, [2, 3, 4]]]

validation_x, validation_y = function(Input)

print(len(validation_x))
print(len(validation_y))

выходы

2
2

как и ожидалось.

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