view
, numpy
'un yaptıklarına denk bir şey mi düşünüyorsunuz? Ben numpy
bunu neden ve nasıl yaptığını biliyorum.
numpy
array
şekil ve dtype bilgilerinin yanı sıra bir veri arabelleğe sahip bir nesnedir. Bu bilgileri __array_interface__
özelliğinde görebilirsiniz. Bir view
, kendi şekil niteliğine sahip, ancak kaynak arabelleğinde bir yere işaret eden yeni bir veri arabelleği işaretçisi olan yeni bir numpy nesnesidir. Ayrıca "arabam yok" yazan bir bayrak var. numpy
ayrıca kendi referans sayısını da korur, böylece orijinal (sahip) dizisi silinirse (ve toplanan çöp) veri arabelleği yok olmaz.
Bu görünüm kullanımı, özellikle çok büyük dizilerle (örneğin, bellek hatalarıyla ilgili sorular SO'da yaygındır) büyük zaman tasarrufu sağlayabilir. Görünümler ayrıca farklı dtype
izin verir, böylece bir veri arabelleği 4 bayt tamsayı veya 1 bayt karakter, vb. Görüntülenebilir.
Bu nasıl tuples için geçerlidir? Tahminimce fazladan bir bagaj gerektirmesi. Bir tuple, sabit bir nesne işaretçisi setinden oluşur - muhtemelen bir C dizisi. Bir görünüm aynı diziyi kullanır, ancak kendi başlangıç ve bitiş işaretçileriyle (işaretçiler ve/veya uzunluklar). Bayrakları paylaşmaya ne dersin? Çöp toplama?
Ve tipik boyut ve tupllerin kullanımı nedir? Tuple'ların ortak kullanımı argümanları bir işleve iletmektir. Tahminimce tipik bir Python çalışmasında tuplelerin çoğunluğu küçük - 0, 1 veya 2 elementtir. Dilimlere izin verilir, ancak çok yaygın mı? Küçük tuples veya çok büyük olanlar?
Tuple dilimleri görünümleri yapmak (istenmeyen bir şekilde) için istenmeyen sonuçlar doğurur mu? Görünümler ve kopyalar arasındaki ayrım, numpy
kullanıcılarının kavraması daha zor şeylerden biridir. Bir tuple immutable olması gerekiyordu - bu tuple içindeki işaretçiler değiştirilemez - uygulamaların uygulanmasının kullanıcılar için görünmez olması mümkündür. Ama yine de merak ediyorum.
PyPy
sürümünün bir dalı üzerinde bu fikri denemek mantıklı gelebilir - Cpython
koduna girmeyi gerçekten istemediğiniz sürece. Veya Cython
ile özel bir sınıf olarak.
Bazen cevap “çünkü hiç kimse onu tam olarak uygulamak için zaman ayırmadı”. –
Bir çekme isteği gönderin :) –
Kopyalama miktarını azalttığınız ve işaretlediğiniz sayının azaltılmasıyla, daha önce toplanan çöpün sayılması için, orijinal tuple sayısı azaltılabilir. – cr3