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

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

如何在 numpy 中執行此操作(平鋪操作的鏈接)?

如何在 numpy 中執行此操作(平鋪操作的鏈接)?

DIEA 2021-08-24 18:27:37
我正在嘗試快速生成 numpy 數組,可能不通過 python。我想構建一個將其作為輸入的一維索引 numpy 數組:[2,3]和這個[2,4]并且會返回這個 [0,1,0,1,0,1,2,0,1,2,0,1,2,0,1,2]說明:我從 0 迭代到 2(所以 [0,1] 數組)并重復它 2 次: [0,1,0,1]然后我從 0 迭代到 3(所以 [0,1,2] 數組)并重復它 4 次:[0,1,2,0,1,2,0,1,2,0,1,2] 然后我把所有東西都展平了。有沒有辦法在 numpy 中完全做到這一點?現在,我正在使用 np.tile() 分別在 numpy 中構建每個表,然后將所有內容展平,但我覺得有一種更有效的方法可以只轉換為 C 函數調用而不轉換為 python
查看完整描述

2 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

這是一個矢量化的解決方案:


def cycles(spec):

    steps = np.repeat(*spec)

    ps = steps.cumsum()

    psj = np.zeros(ps[-1], int)

    psj[ps[:-1]] = steps[:-1]

    return np.arange(ps[-1]) - psj.cumsum()

演示:


>>> cycles(((2,3),(2,4)))

array([0, 1, 0, 1, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2])


查看完整回答
反對 回復 2021-08-24
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

我不完全確定這是否是您想要的;這里調用 func() 中的每個元組首先包含范圍,然后是重復。


import numpy



def func(tups):

    Arr = numpy.empty(numpy.sum([ele[0] * ele[1] for ele in tups]), dtype=int)

    i = 0

    for ele in tups:

        Arr[i:i + ele[0] * ele[1]] = numpy.tile(numpy.arange(ele[0]), ele[1])

        i += ele[0] * ele[1]

    return Arr



arr = func([(2, 3), (3, 4)])

print(arr)

# [0 1 0 1 0 1 0 1 2 0 1 2 0 1 2 0 1 2]


查看完整回答
反對 回復 2021-08-24
  • 2 回答
  • 0 關注
  • 264 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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