Numpy Проблема с размером массива - PullRequest
1 голос
/ 20 апреля 2020

У меня есть два массива, которые имеют разные размеры. Я хочу привести последний (india_cases2) к первому (baseline_diag), чтобы я мог легко их построить. Я не могу построить india_cases.

india_daily_cases = pd.read_csv('India_Cases.csv')
india_daily_cases_subset = india_daily_cases.loc[india_daily_cases['t']> 33.,['Daily Confirmed']]
india_cases = india_daily_cases_subset.to_numpy()
india_cases2 = india_cases.T

baseline_diag - это вывод функции - не уверен, что предоставление полного кода функции здесь поможет. Разница в размерах следующая:

enter image description here

Код для построения графиков следующий:

ax.plot(t, india_cases.T, 'r', alpha=0.5, lw=2, label='Actual Observed Cases')
ax.bar(t - 0.2, baseline_onsets, 0.4, label='New Onsets')
ax.bar(t + 0.2, baseline_cases, 0.4, label='New Cases')

Ошибка I get выглядит следующим образом:

ValueError: x и y должны иметь одинаковое первое измерение, но иметь формы (47,) и (1, 47)

Как изменить размерность для india_cases2

Ответы [ 4 ]

2 голосов
/ 20 апреля 2020

Существует ряд эквивалентных методов, которые вы можете использовать:

india_cases2.ravel()
np.squeeze(india_cases2)
india_cases2.reshape(-1)

Даже что-то вроде

india_cases2.shape = (india_cases2.size,)

В качестве альтернативы, вы можете расширить t с помощью

t.reshape(1, -1)
1 голос
/ 20 апреля 2020
india_daily_cases_subset = india_daily_cases.loc[india_daily_cases['t']> 33.,['Daily Confirmed']]
india_cases = india_daily_cases_subset.to_numpy()
india_cases2 = india_cases.T

india_daily_cases_subset, при этом индексация loc создает DataFrame с 1 столбцом. india_cases - это массив (n,1), который с транспонированием становится (1,n).

india_daily_cases_subset = india_daily_cases.loc[india_daily_cases['t']> 33.,'Daily Confirmed']

без [] вокруг селектора столбцов, результатом будет pandas.Series. Его to_numpy() - это форма 1d массива (n,).

Другими словами, обращая внимание на индексацию вашего фрейма данных, вы можете получить нужный 1d массив без шага squeeze/ravel.

0 голосов
/ 20 апреля 2020

используйте изменение формы, добавив желаемое измерение:

baseline_onsets = baseline_onsets[None, :]

Я не вижу форму baseline_cases, но вам может потребоваться сделать то же самое для этого массива.

0 голосов
/ 20 апреля 2020

Я бы использовал numpy.ndarray.reshape.

Я не уверен, какая форма будет предпочтительнее, но вы можете изменить форму, как хотите, выполнив reshape(47), reshape((47,1)) или reshape((1,47)).

https://numpy.org/doc/stable/reference/generated/numpy.ndarray.reshape.html?highlight=reshape#numpy .ndarray.reshape

...