Anda ingin menguji array panjang nol, array yang berisi semua nol, atau keduanya? Apa definisi Anda tentang 'kosong'?
John Lyon
12
@StevenRumbalski: Tapi len(array([[]])1 juga!
strpeter
len()memberikan jumlah dimensi pada sumbu pertama. Tetapi sebuah array dapat memiliki dimensi non-nol di sumbu pertama tetapi masih kosong jika memiliki dimensi nol di sumbu lain. sizelebih baik karena merupakan produk dari semua sumbu.
penanggung jawab
Jawaban:
303
Anda selalu dapat melihat .sizeatributnya. Ini didefinisikan sebagai integer , dan nol ( 0) ketika tidak ada elemen dalam array:
import numpy as np
a = np.array([])if a.size ==0:# Do something when `a` is empty
Ini bagus untuk numpy, tetapi sangat disayangkan itu dianggap unpythonic untuk daftar. Lihat diskusi untuk daftar: stackoverflow.com/questions/53513/... Akan lebih baik jika menggunakan pola yang sama untuk array dan daftar yang numpy.
eric
Kode NumPy secara umum tidak berfungsi dengan benar pada daftar, atau sebaliknya. Anda harus menulis kode dengan cara yang berbeda jika Anda menggunakan daftar vs array NumPy.
Objek utama NumPy adalah array multidimensi yang homogen. Dimensi Numpy disebut kapak. Jumlah sumbu adalah peringkat. Kelas array Numpy disebut ndarray. Ia juga dikenal dengan array alias. Atribut yang lebih penting dari objek ndarray adalah:
ndarray.ndim
jumlah sumbu (dimensi) dari array. Di dunia Python, jumlah dimensi disebut sebagai peringkat.
ndarray.membentuk
dimensi array. Ini adalah tupel bilangan bulat yang menunjukkan ukuran array di setiap dimensi. Untuk matriks dengan kolom n rows dan m, bentuknya adalah (n, m). Panjang bentuk tuple karena itu pangkat, atau jumlah dimensi, ndim.
ndarray.size
jumlah total elemen array. Ini sama dengan produk dari unsur-unsur bentuk.
Namun satu peringatan. Perhatikan bahwa np.array (Tidak Ada) .ukuran mengembalikan 1! Ini karena ukuran a. Setara dengan np.prod (a.shape), np.array (None) .shape is (), dan produk kosong adalah 1.
>>>import numpy as np
>>> np.array(None).size
1>>> np.array(None).shape
()>>> np.prod(())1.0
Oleh karena itu, saya menggunakan yang berikut ini untuk menguji apakah array numpy memiliki elemen:
>>>def elements(array):...return array.ndim and array.size
>>> elements(np.array(None))0>>> elements(np.array([]))0>>> elements(np.zeros((2,3,4)))24
@DrBwts Array-nya tidak mengandung Noneobjek. Lihatlah bentuknya.
Navin
Array dengan bentuk ()adalah array skalar, yang memang mengandung elemen (skalar). Dalam contoh ini, skalar adalah None( Nonetidak memiliki arti khusus, ini hanya sebuah array objek). Tergantung pada apa yang Anda lakukan tetapi Anda kemungkinan besar ingin mempertimbangkan skalar array sebagai tidak kosong.
penanggung jawab
-1
Mengapa kita ingin memeriksa apakah array itu empty? Array tidak tumbuh atau menyusut seperti halnya list. Dimulai dengan array 'kosong', dan tumbuh dengan np.appendadalah kesalahan pemula yang sering terjadi.
Menggunakan daftar if alist:bergantung pada nilai booleannya:
Tetapi mencoba melakukan hal yang sama dengan menghasilkan array (dalam versi 1.18):
In[104]: bool(np.array([]))/usr/local/bin/ipython3:1:DeprecationWarning:The truth value
of an empty array is ambiguous.ReturningFalse, but in
future this will result in an error.Use`array.size >0` to
check that an array isnot empty.#!/usr/bin/python3Out[104]:FalseIn[105]: bool(np.array([1]))Out[105]:True
dan bool(np.array([1,2])menghasilkan kesalahan ambiguitas yang terkenal.
len(array( [] ))
adalah 0.len(array( [0] )
adalah 1.len(array([[]])
1 juga!len()
memberikan jumlah dimensi pada sumbu pertama. Tetapi sebuah array dapat memiliki dimensi non-nol di sumbu pertama tetapi masih kosong jika memiliki dimensi nol di sumbu lain.size
lebih baik karena merupakan produk dari semua sumbu.Jawaban:
Anda selalu dapat melihat
.size
atributnya. Ini didefinisikan sebagai integer , dan nol (0
) ketika tidak ada elemen dalam array:sumber
http://www.scipy.org/Tentative_NumPy_Tutorial#head-6a1bc005bd80e1b19f812e1e64e0d25d50f99fe2
sumber
Namun satu peringatan. Perhatikan bahwa np.array (Tidak Ada) .ukuran mengembalikan 1! Ini karena ukuran a. Setara dengan np.prod (a.shape), np.array (None) .shape is (), dan produk kosong adalah 1.
Oleh karena itu, saya menggunakan yang berikut ini untuk menguji apakah array numpy memiliki elemen:
sumber
None
objek bukan array kosong, lihat jawaban di sini untuk perincian lebih lanjutNone
objek. Lihatlah bentuknya.()
adalah array skalar, yang memang mengandung elemen (skalar). Dalam contoh ini, skalar adalahNone
(None
tidak memiliki arti khusus, ini hanya sebuah array objek). Tergantung pada apa yang Anda lakukan tetapi Anda kemungkinan besar ingin mempertimbangkan skalar array sebagai tidak kosong.Mengapa kita ingin memeriksa apakah array itu
empty
? Array tidak tumbuh atau menyusut seperti halnya list. Dimulai dengan array 'kosong', dan tumbuh dengannp.append
adalah kesalahan pemula yang sering terjadi.Menggunakan daftar
if alist:
bergantung pada nilai booleannya:Tetapi mencoba melakukan hal yang sama dengan menghasilkan array (dalam versi 1.18):
dan
bool(np.array([1,2])
menghasilkan kesalahan ambiguitas yang terkenal.sumber