Numpy Power не допускает отрицательных значений - PullRequest
0 голосов
/ 12 июня 2018

У меня есть объемные данные, из которых я хочу построить октавную шкалу: 2 ^ n: 1,2,4,8,16,32,64 ... и т. Д. N = 0,1,2,3,4,5,6 ...

Объем данных:

Biovolume (µm³)   
0.238873
1.05251
2.82718

Мой код:

import pandas as pd
import numpy as np

#data file
data = pd.read_csv("data.csv")

#define and sort biovolume
Biovolume = data['Biovolume'].as_matrix()
Biovolume = np.sort(Biovolume)

#octave scale:
min_scale = np.floor(np.log2(np.min(Biovolume))).astype('int')
max_scale = np.ceil(np.log2(np.max(Biovolume))).astype('int')

Минимальная шкала для данных объема равна -3и максимум 2. Следующим шагом является фактическое построение октавной шкалы для данных:

octave_scale = np.power(2, range(min_scale, max_scale+1))

Однако я получаю эту ошибку: ValueError: Не допускаются целые числа к отрицательным целым числам.

Я думаю, это означает, что невозможно сделать 2 ^ -3, 2 ^ -2 и 2 ^ -1.Почему это?Есть ли решение?

1 Ответ

0 голосов
/ 12 июня 2018

См. этот ответ для объяснения того, почему np.power не обрабатывает отрицательные числа.

Одним из решений является использование np.float_power, которое специально разработано для обработки отрицательных сил,Из документов :

Цель состоит в том, чтобы функция возвращала пригодный для использования результат для отрицательных степеней и редко переполнялась для положительных степеней.

пример:

>>> np.power(5,-2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Integers to negative integer powers are not allowed.
>>> np.float_power(5, -2)
0.040000000000000001
...