我有一個 10 列寬和 5 行長的 NaN 陣列。
我有一個 5x3 的泊松亂數生成陣列。這表示每個 A、B 和 C 運行 5 次,其中每列具有不同的泊松分布 lambda 值。
A B C
[1, 1, 2,
1, 2, 2,
2, 1, 4,
1, 2, 3,
0, 1, 2]
每行代表事件的數量。也就是說,第一行將產生一個型別 A 的事件、一個型別 B 的事件和兩個型別 C 的事件。
我想遍歷每一行并產生一組統一的亂數。對于 A,它將介于 1 和 100 之間,對于 B 它將介于 101 和 200 之間,對于 C 它將介于 201 和 300 之間。
第一行的輸出將有四個數字,一個介于 1 和 100 之間的數字,一個介于 101 和 200 之間的數字,以及兩個介于 201 和 300 之間的數字。因此,第一行的示例輸出可能是:
[34, 105, 287, 221]
第二個輸出行將有五個數字,第三行將有七個,依此類推。我想通過覆寫每行中被替換的 NaN 將其存盤在我的 NaN 陣列中。有人可以幫忙嗎?謝謝!
uj5u.com熱心網友回復:
我有一個相當低效/未矢量化的方法,它可能是也可能不是您正在尋找的方法,因為我不清楚您的問題的一部分。您是否希望最終陣列具有不同大小的行,或者大小相同但用 nan 填充?
此解決方案假設使用 s 填充nan,因為您談到了nans 被覆寫并且沒有提到額外/未使用nan的 s 被洗掉。我還假設你ABC的東西被構造成一個 size 的 numpy 陣列(5,3),我稱之為nans的陣列results_arr。
import numpy as np
from random import randint
# Initializing the arrays
results_arr = np.full((5,10), np.nan)
abc = np.array([[1, 1, 2], [1, 2, 2], [2, 1, 4], [1, 2, 3], [0, 1, 2]])
# Loops through each row in ABC
for row_idx in range(len(abc)):
a, b, c = abc[row_idx]
# Here, I'm getting a number in the specified uniform distribution as many times as is specified in the A column. The other 2 loops do the same for the B and C columns.
for i in range(0, a):
results_arr[row_idx, i] = randint(1, 100)
for j in range(a, a b):
results_arr[row_idx, j] = randint(101, 200)
for k in range(a b, a b c):
results_arr[row_idx, k] = randint(201, 300)
希望有幫助!
PS這是一個行不均勻的解決方案。結果存盤在串列串列中,因為numpy不支持不規則陣列(即不同長度的行)。
import numpy as np
from random import randint
# Initializations
results_arr = []
abc = np.array([[1, 1, 2], [1, 2, 2], [2, 1, 4], [1, 2, 3], [0, 1, 2]])
# Same code logic as before, just storing the results differently
for row_idx in range(len(abc)):
a, b, c = abc[row_idx]
results_this_row = []
for i in range(0, a):
results_this_row.append(randint(1, 100))
for j in range(a, a b):
results_this_row.append(randint(101, 200))
for k in range(a b, a b c):
results_this_row.append(randint(201, 300))
results_arr.append(results_this_row)
我希望這兩個解決方案涵蓋了您正在尋找的內容!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516082.html
上一篇:使用numpy陣列處理資料
