Python'da, tüm True veya all False ile dolu bir dizi rasgele şekil nasıl oluştururum?
Python'da, tüm True veya all False ile dolu bir dizi rasgele şekil nasıl oluştururum?
Yanıtlar:
numpy zaten hepsinin veya tüm sıfırların dizilerinin kolayca oluşturulmasına izin veriyor:
örneğin numpy.ones((2, 2))
veyanumpy.zeros((2, 2))
Yana True
ve False
sıra Python temsil edilir 1
ve 0
sırasıyla biz opsiyonel kullanarak boole olmalıdır bu diziyi belirtmek için sadece var dtype
parametreyi ve işlem tamamdır.
numpy.ones((2, 2), dtype=bool)
İadeler:
array([[ True, True],
[ True, True]], dtype=bool)
GÜNCELLEME: 30 Ekim 2013
Numpy sürüm 1.8'den bu yana , full
niyetimizi daha net bir şekilde gösteren sözdizimi ile aynı sonucu elde etmek için kullanabiliriz (fmonegaglia'nın belirttiği gibi):
numpy.full((2, 2), True, dtype=bool)
GÜNCELLEME: 16 Ocak 2017
En az numpy sürüm 1.12 olduğundan , full
sonuçları dtype
ikinci parametreye otomatik olarak verir , böylece şunu yazabiliriz:
numpy.full((2, 2), True)
a=np.ones((2,2))
onu takip a.dtype=bool
ETMEZ.
numpy.full((2,2), True, dtype=bool)
ones
Ve zeros
cevaplar Sayı dizisi inşa yoktur. Doğrudan bir dizi bools inşa ediyorlar.
numpy.full((2,2), True)
eşdeğer?
int 1
için ağır bir kaldırma yaptığını hayal edemiyorum bool True
.
ones
ve zeros
sırasıyla bunlarla ve sıfırlarla dolu diziler oluşturan isteğe bağlı bir dtype
parametre alır:
>>> numpy.ones((2, 2), dtype=bool)
array([[ True, True],
[ True, True]], dtype=bool)
>>> numpy.zeros((2, 2), dtype=bool)
array([[False, False],
[False, False]], dtype=bool)
Yazılabilir olması gerekmiyorsa, böyle bir dizi oluşturabilirsiniz np.broadcast_to
:
>>> import numpy as np
>>> np.broadcast_to(True, (2, 5))
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
Yazılabilir olması gerekiyorsa, boş bir dizi ve fill
kendiniz de oluşturabilirsiniz :
>>> arr = np.empty((2, 5), dtype=bool)
>>> arr.fill(1)
>>> arr
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
Bu yaklaşımlar sadece alternatif önerilerdir. Genel olarak sopa ile gereken np.full
, np.zeros
ya da np.ones
diğer cevaplar önermek gibi.
np.full
Ve arasında herhangi bir fark varsa hızlıca bir timeit koştunp.ones
sürümü .
Yanıt: Hayır
import timeit
n_array, n_test = 1000, 10000
setup = f"import numpy as np; n = {n_array};"
print(f"np.ones: {timeit.timeit('np.ones((n, n), dtype=bool)', number=n_test, setup=setup)}s")
print(f"np.full: {timeit.timeit('np.full((n, n), True)', number=n_test, setup=setup)}s")
Sonuç:
np.ones: 0.38416870904620737s
np.full: 0.38430388597771525s
ÖNEMLİ
Hakkında yazı hakkında np.empty
(ve itibarım çok düşük olduğu için yorum yapamam):
BUNU YAPMAYIN. Tüm diziyi np.empty
başlatmak için KULLANMAYINTrue
Dizi boş olduğundan, bellek yazılmaz ve garanti yoktur, değerlerinizin ne olacağı, ör.
>>> print(np.empty((4,4), dtype=bool))
[[ True True True True]
[ True True True True]
[ True True True True]
[ True True False False]]
>>> a = numpy.full((2,4), True, dtype=bool)
>>> a[1][3]
True
>>> a
array([[ True, True, True, True],
[ True, True, True, True]], dtype=bool)
numpy.full (Boyut, Skaler Değer, Tür). Aktarılabilecek başka argümanlar da var, bununla ilgili belgeler için https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html adresini ziyaret edin.
np.full
- bir yıldan fazla önce cevap !