格式化一个多维数组Numpy Python



我想把下面的列表推导变成一个3维数组,它打印出数组中每个迭代的last index, max , min。下面的(arr[i:] > 0).cumsum()/ np.arange(1, len(arr[i:])+1) * 100)函数计算number of positive array values/ length of array,因此在第一个数组中,6个值中的[12,12,-3,-1,2,1]4为正,因此最终结果为66.66%。然而,如果你只摄入前2个索引[12,12.....],它是100%,所以这是最大效率值,如果你摄入前4个索引[12,12,-3,-1],效率将下降到50%。last_inc, maxs , mins不能在下面工作,但result可以。我怎样才能将last_inc, maxs , mins合并到代码中并获得下面的预期输出?

import numpy as np 
def run(*args):

result = np.array([np.array([((arr[i:] > 0).cumsum()/ np.arange(1, len(arr[i:])+1) * 100) for i in range(len(arr))],dtype=object) for arr in args], dtype=object)
last_inc = result[-1]
maxs = np.max(result)
mins = np.min(result)

run(np.array([12,12,-3,-1,2,1]), np.array([-3,-1,-2,1]), np.array([12,-12]))

预期输出:

last_indexes[[66.66666666666666, 60.0, 50.0, 66.66666666666666, 100.0, 100.0], [25.0, 33.33333333333333, 50.0, 100.0], [50.0, 0.0]]
max[[100.0, 100.0, 50.0, 66.66666666666666, 100.0, 100.0],[25.0, 33.33333333333333, 50.0, 100.0],[100.0, 0.0]]
min[[50.0, 33.33333333333333, 0.0, 0.0, 100.0, 100.0]]

对于你正在做的事情来说,numpy看起来是个糟糕的工具。你理解是什么阻止你完成工作。您必须在分钟内做一些过滤,并可能包装代码

def run2(arr):
last_incs=np.zeros_like(arr, float)
maxs=np.zeros_like(arr, float)
mins=np.zeros_like(arr, float)
for i in range(arr.size):
result=np.cumsum(arr[i:]>0)/np.arange(1,arr[i:].size+1)*100
last_incs[i]=result[-1]
maxs[i]=np.max(result)
mins[i]=np.min(result)
print(last_incs,maxs,mins)

for arr in [
np.array([12,12,-3,-1,2,1]), 
np.array([-3,-1,-2,1]), 
np.array([12,-12])]:
run2(arr)