Требуемое значение размера - PullRequest
0 голосов
/ 08 мая 2018

Я недавно наткнулся на странное поведение, которое я не понимаю: у меня есть список экспериментов. Каждый из экспериментов сам по себе представляет собой список образцов. Таким образом, я получаю список списков. Эксперименты проводились в различных условиях, поэтому некоторые из них содержат больше образцов, чем другие. Общим для них является то, что они содержат более 100 образцов.

Теперь я хотел вычислить среднее и стандартное отклонение образцов для каждого эксперимента. Что работает для меня это

sDevPD = [np.std(x) for x in f0PD]

где я просто перебираю все списки в моем списке экспериментов f0PD. Хорошо, теперь я попробовал использовать numpy:

sDevPD = np.std(f0PD, axis = 1)

Это не работает, NumPy выбросит IndexError: tuple index out of range. Я попытался отследить ошибку как мог, и обнаружил, что функция numpy выдает эту ошибку, только если эксперименты различаются по размеру. Если у меня есть список списков одинаковой длины, все работает нормально. То же самое относится к np.mean.

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

1 Ответ

0 голосов
/ 08 мая 2018

Numpy - это действительно матричная библиотека. Это не очень хорошо с массивами переменной длины. Все операции должны быть в состоянии транслироваться, что не имеет место в вашем примере ... Вместо использования Numpy, попробуйте использовать Pandas. Он опирается на NumPy для элементарных операций. Например:

import pandas as pd
import numpy as np

f0PD = []
for _ in range(10): # here I assume f0PD is a list of 10 lists
    f0PD.append(np.arange(np.random.randint(20))) # this creates lists of random size, up to 20

df = pd.DataFrame(f0PD)
df.std(axis=1) # this works well, regardless of the size of elementary lists
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...