Anda jarang membutuhkan loop untuk operasi vektor di numpy. Anda dapat membuat larik yang belum diinisialisasi dan menetapkan semua entri sekaligus:
>>> a = numpy.empty((3,3,))
>>> a[:] = numpy.nan
>>> a
array([[ NaN, NaN, NaN],
[ NaN, NaN, NaN],
[ NaN, NaN, NaN]])
Saya telah menghitung waktunya alternatif di a[:] = numpy.nan
sini dan a.fill(numpy.nan)
sebagaimana diposting oleh Blaenk:
$ python -mtimeit "import numpy as np; a = np.empty((100,100));" "a.fill(np.nan)"
10000 loops, best of 3: 54.3 usec per loop
$ python -mtimeit "import numpy as np; a = np.empty((100,100));" "a[:] = np.nan"
10000 loops, best of 3: 88.8 usec per loop
Pengaturan waktu menunjukkan preferensi untuk ndarray.fill(..)
sebagai alternatif yang lebih cepat. OTOH, saya suka implementasi kenyamanan numpy di mana Anda dapat menetapkan nilai untuk seluruh irisan pada saat itu, maksud kode sangat jelas.
Perhatikan bahwa ndarray.fill
menjalankan operasinya di tempat, jadi numpy.empty((3,3,)).fill(numpy.nan)
alih-alih akan kembali None
.
np.nan
salah ketika dikonversi ke int.