亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一系列列表的逐元素隨機選擇(無循環)

一系列列表的逐元素隨機選擇(無循環)

天涯盡頭無女友 2023-03-30 17:30:25
我想從一系列列表中的每個列表中隨機選擇一個元素。import pandas as pdimport numpy as npl=[['a','b','c'],['d','e','f'],['g','h','i'],['j','k','l'],['m','n','o']]s = pd.Series(l)也是s:0    [a, b, c]1    [d, e, f]2    [g, h, i]3    [j, k, l]4    [m, n, o]dtype: object我知道我可以做到以下幾點:s = pd.Series([np.random.choice(i) for i in s])哪個有效:0    a1    e2    h3    j4    mdtype: object但我想知道是否有非循環方法可以做到這一點?例如,(假設每個list大小相等)您可以創建一個隨機索引數組來嘗試從每個索引中選擇不同的元素list:i = np.random.randint(3, size=len(l))#array([2, 2, 0, 1, 0])但是做 says[i]是行不通的,因為那是索引s而不是應用于每個list:2    [g, h, i]2    [g, h, i]0    [a, b, c]1    [d, e, f]0    [a, b, c]dtype: object我的動機是擁有可以處理大量列表的東西,從而避免循環。但是如果我的列表理解看起來是最合理的,或者沒有內置pandas/numpy函數,請告訴我。
查看完整描述

2 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

我只能這樣想,但是,性能可能是問題


np.array(s.tolist())[np.arange(len(s)), np.random.randint(3, size=len(s))]

array(['c', 'e', 'i', 'k', 'n'], dtype='<U1')

一些時機


%timeit s.explode().sample(frac=1, random_state=1) 

5.05 ms ± 294 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit pd.Series([np.random.choice(i) for i in s])

23.1 ms ± 184 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit np.array(s.tolist())[np.arange(len(s)), np.random.randint(3, size=len(s))]

1.63 ms ± 50.3 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)


查看完整回答
反對 回復 2023-03-30
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

您可以嘗試explode,隨機播放分解的系列,然后采樣。這甚至不需要列表具有相同的長度。


(s.explode()

   .sample(frac=1, random_state=1)  # random_state added for repeatability, drop if needed

   .groupby(level=0).head(1)

)

輸出:


1    d

2    h

0    c

3    k

4    n

dtype: object


查看完整回答
反對 回復 2023-03-30
  • 2 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號