Проверьте размеры массива numpy в цикле for, а затем преобразуйте двумерные данные в одномерные. - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю с функцией polyfit, чтобы добавить линию тренда в мой набор данных.Так как я получил много наборов данных (намного больше, чем четыре примера, найденных здесь), я хотел бы сделать цикл for, чтобы проверить размеры данных - как мы знаем, функция polyfit принимает только 1-Буду данным.Мой новичок в использовании np.ravel() выглядит примерно так:

import numpy as np

data_a = np.array([1, 2, 3, 4, 5, 6])
data_b = np.array([10, 20, 30, 40, 50, 60])
data_c = np.transpose(np.array([[1, 2, 3, 4, 5, 6]]))
data_d = np.array([[10, 20, 30, 40, 50, 60]])


for items in (data_a, data_b, data_c, data_d):
    if items.ndim == 1:
        print('It is an 1-D array -- no action needed.')
        print(items.ndim)
    elif items.ndim == 2:
        print('It is an 2-D array, please do not be alarmed, I will convert it for you.')
        items.ravel()
        print(items.ndim)
    else:
        print('It contains more than two dimensions.')

print(data_a.ndim)
print(data_b.ndim)
print(data_c.ndim)
print(data_d.ndim)

Если бы я использовал np.ravel() в любом наборе данных вне цикла for, он работает так, как задумано.Например:

data_c_2 = data_c.ravel()
data_d_2 = data_d.ravel()

Но так как у меня довольно много наборов данных, было бы лучше (в моем, возможно, идиотском уме) перебрать его, проверяя размеры.

IБуду очень признателен, если кто-нибудь сможет найти время, чтобы помочь мне.Я также был бы признателен, если бы кто-то мог объяснить, что я делаю неправильно в цикле for, чтобы лучше понять это.

Спасибо.

1 Ответ

0 голосов
/ 01 февраля 2019

за одного.items.ravel() возвращает новый массив.Вне цикла вы можете использовать что-то вроде:

data = data.ravel()

Вы не можете сделать это внутри цикла, так как вы будете изменять только переменную цикла.Если вы хотите развернуть «на месте», вы можете использовать np.resize, из документов :

Изменить форму и размер массива на месте.

Поэтому просто замените:

items.ravel()

на:

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