import numpy as np
from scipy import stats

np.random.seed(42)
data = sorted(stats.norm.rvs(size=1000))

我想将data提升到 3/4.的强大功能

我试过了:

np.power(data, 3/4) # doesn't work because power is not integer
np.float_power(data, 3/4) # returns nan for negative elements
scipy.linalg.fractional_matrix_power(data, 3/4) # doesn't work because data is 1D array, not matrix

我怎么能用numpy做到这一点?

分析解答

没有必要明确地调用np.power;通过在使用sorted之前执行计算(甚至使用np.sort),我们可以使用运算符:

np.sort(data ** (3 / 4))

必要时,这将给出nan值,因为负数的root将是复杂的,并且您的阵列只能处理floats

因此解决方案是将其转换为dtype np.complex

data = np.sort(stats.norm.rvs(size=10).astype(np.complex) ** (3 / 4))
print(data)

输出:

[-1.18840462+1.18840462j -0.10707968+0.10707968j -0.09787584+0.09787584j
 -0.05992208+0.05992208j  0.10880864+0.j          0.1484953 +0.j
  0.45161317+0.j          0.78783041+0.j          0.79189574+0.j
  0.93656538+0.j        ]