簡體   English   中英

組一個 numpy 陣列

[英]Group a numpy array

我有一個一維數組A ,這樣0 <= A[i] <= 11 ,我想 map A到數組B這樣

for i in range(len(A)):
    if 0 <= A[i] <= 2: B[i] = 0
    elif 3 <= A[i] <= 5: B[i] = 1
    elif 6 <= A[i] <= 8: B[i] = 2
    elif 9 <= A[i] <= 11: B[i] = 3

如何在numpy中有效地實現這一點?

您需要使用 int 除法//3 ,這是最高效的解決方案

A = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
B = A // 3

print(A)  # [0  1  2  3  4  5  6  7  8  9 10 11]
print(B)  # [0  0  0  1  1  1  2  2  2  3  3  3]

我會做一些事情,比如將 A[i] 的值除以 3,因為您將它們 3 除以 3、0-2 除以 3 go 答案 0、3-5 go 答案 1、6-8 除以3 等於 2,以此類推

我在這里建立了一個小架構:

A[i] --> 0-2. 除以 3 = 0,你在數組 B[i] 中的值是 0,所以沒關系A[i] --> 3-5. 除以 3 = 1,依此類推。 只需使用一種方法將 floor 設置為值,使其不會成為浮點類型。

其他人提供的答案是有效的,但是我發現來自 numpy 的 function 非常優雅,而且它可以讓您避免 for 循環,這對於大型 arrays

import numpy as np

bins = [3, 5, 8, 9, 11]
B = np.digitize(A, bins)

像這樣的東西可能會起作用:

C = np.zeros(12, dtype=np.int)
C[3:6] = 1
C[6:9] = 2
C[9:12] = 3

B = C[A]

如果您希望將此擴展為更復雜的示例,您可以使用所有條件定義 function:

def f(a):
    if 0 <= a and a <= 2:
        return 0
    elif 3 <= a and a <= 5:
        return 1
    elif 6 <= a and a <= 8:
        return 2
    elif 9 <= a and a <= 11:
        return 3

並在您的數組A上調用它:

A = np.array([0,1,5,7,8,9,10,10, 11])
B = np.array(list(map(f, A))) # array([0, 0, 1, 2, 2, 3, 3, 3, 3])

暫無
暫無

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

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