![](/img/trans.png)
[英]How to convert a dictionary with datetime objects as keys and numpy arrays as values to 2D numpy array?
[英]How to convert 2D arrays in dictionary into one single array?
我有以下代碼:
import random
import numpy as np
import pandas as pd
num_seq = 100
len_seq = 20
nts = 4
sequences = np.random.choice(nts, size = (num_seq, len_seq), replace=True)
sequences = np.unique(sequences, axis=0) #sorts the sequences
d = {}
pr = 5
for i in range(num_seq):
globals()['seq_' + str(i)] = np.tile(sequences[i,:],(pr,1))
d['seq_' + str(i)] = np.tile(sequences[i,:],(pr,1))
pool = np.empty((0,len_seq),dtype=int)
for i in range(num_seq):
pool = np.concatenate((pool,eval('seq_' +str(i))))
我想將字典d
轉換為 Numpy 數組(或只有一個條目的字典)。 我的代碼有效,產生pool
。 但是,在num_seq
、 len_seq
和pr
的值較大時,需要很長時間。
執行時間很關鍵,因此我的問題是:有沒有更有效的方法來做到這一點?
以下是要點列表:
np.concatenate
在O(n)
中運行,因此您的第二個循環在O(n^2)
時間內運行。 您可以將 append 的值放到一個列表中,然后np.vstack
將所有值放在最后(在O(n)
時間內)。globals()
很慢並且被認為是一種不好的做法(因為它很容易以令人討厭的方式破壞您的代碼);eval(...)
也很慢而且也不安全,所以避免它;這是一個更快的代碼示例(代替第二個循環):
pool = np.vstack([d[f'seq_{i}'] for i in range(num_seq)])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.