簡體   English   中英

格式化多維數組 Numpy Python

[英]Formatting a multidimensional array 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 arraynumber of positive array values/ length of array所以在第一個數組[12,12,-3,-1,2,1]中,6 個值中有 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM