Методы в numpy recarray

#python #numpy

#python #numpy

Вопрос:

У меня есть numpy recarray, и я хочу рассчитать некоторую статистику. Я не хочу использовать pandas , но ищу решение с использованием recarray (если оно есть).

Есть ли способ, например, вычислить mean оба «столбца», не «разворачивая» сначала «столбцы»?

Ниже приведены TypeError: cannot perform reduce with flexible type результаты .

 x = np.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')])
x = x.view(np.recarray)

x.mean() # Error
  

Я мог придумать только следующее решение.

 means = [np.mean(x[rec])for rec in x.dtype.names]
  

Есть ли более простое решение?

Спасибо за вашу помощь!

Комментарии:

1. Хорошо, но я хочу вести статистику по каждому column , который содержит только элементы одного и того же типа. В этом случае один столбец является float, а один — integer . Все еще нет способа?

2. Что не так с циклом? В любом случае операция не может быть векторизована по столбцам с разными типами. Массив записей обрабатывается и хранится принципиально иначе, чем ndarray. Вы можете думать об этом как о векторе структур. Возможно, pandas вычислит среднее значение по столбцам, не жалуясь.

3. Я думаю, вам понадобится тот же dtype для столбцов, чтобы достичь того, что вам нужно.

4. Вам нужно итеративное решение. Вы не можете применять напрямую (векторизованным способом) вдоль некоторой оси, имеющей смешанные типы @FredMaster

5. Если у вас очень большой массив, вам, вероятно, лучше иметь два отдельных массива по dtype и использовать функции numpys отдельно