listeleri l
verimli Ben ilk <code>[1, 2, 3]</code> ile tek boyutlu nesne dizisi alırsınız
l = [[1, 2, 3], [1, 2]]
listesini dikkate nan doldurulur asgari içeren diziye listelerinin düzensiz listesini dönüştürmek pozisyon ve ikinci konumda [1, 2]
.
print(np.array(l))
[[1, 2, 3] [1, 2]]
Şunu istiyorum yerine
print(np.array([[1, 2, 3], [1, 2, np.nan]]))
[[ 1. 2. 3.]
[ 1. 2. nan]]
Ben bir döngü ile yapabilirsiniz, ama hepimiz döngüler ne kadar sevilmeyen biliyoruz
def box_pir(l):
lengths = [i for i in map(len, l)]
shape = (len(l), max(lengths))
a = np.full(shape, np.nan)
for i, r in enumerate(l):
a[i, :lengths[i]] = r
return a
print(box_pir(l))
[[ 1. 2. 3.]
[ 1. 2. nan]]
nasıl bunu yapıyorum hızlı, vectorized bir şekilde?
zamanlama
kurulum fonksiyonları
%%cython
import numpy as np
def box_pir_cython(l):
lengths = [len(item) for item in l]
shape = (len(l), max(lengths))
a = np.full(shape, np.nan)
for i, r in enumerate(l):
a[i, :lengths[i]] = r
return a
def box_divikar(v):
lens = np.array([len(item) for item in v])
mask = lens[:,None] > np.arange(lens.max())
out = np.full(mask.shape, np.nan)
out[mask] = np.concatenate(v)
return out
def box_hpaulj(LoL):
return np.array(list(zip_longest(*LoL, fillvalue=np.nan))).T
def box_simon(LoL):
max_len = len(max(LoL, key=len))
return np.array([x + [np.nan]*(max_len-len(x)) for x in LoL])
def box_dawg(LoL):
cols=len(max(LoL, key=len))
rows=len(LoL)
AoA=np.empty((rows,cols,))
AoA.fill(np.nan)
for idx in range(rows):
AoA[idx,0:len(LoL[idx])]=LoL[idx]
return AoA
def box_pir(l):
lengths = [len(item) for item in l]
shape = (len(l), max(lengths))
a = np.full(shape, np.nan)
for i, r in enumerate(l):
a[i, :lengths[i]] = r
return a
def box_pandas(l):
return pd.DataFrame(l).values
@piRSquared Anlamayı anlama, haritadan daha iyi performans gösterebilir mi? – Divakar
@piRSquared Ah hayır, sorun yok. Ayrıca, 'map' ile uyumluluk sorunları olabileceğini bilmiyordum. Yani bence adil bir düzenleme. Bazı çalışma zamanı testlerini mutlaka görmek ilginç olurdu! – Divakar
@piRSquared Güzel, gerçekten kapsamlı bir kıyaslama var! Tüm veri boyutlarında net bir kazanan görmediğim için. Yine de iyi yarışmalar. – Divakar