Untuk array dua dimensi, saya mencoba membuat fungsi standarisasi, yang seharusnya berfungsi berdasarkan baris dan kolom. Saya tidak yakin apa yang harus dilakukan ketika argumen diberikan dengan axis=1 (bijaksana baris).

def standardize(x, axis=None):
if axis == 0:
    return (x - x.mean(axis)) / x.std(axis)
else:
    ?????

Saya mencoba mengubah axis menjadi axis = 1 di bagian ini: (x - x.mean(axis)) / x.std(axis)

Tapi kemudian saya mendapatkan kesalahan berikut:

 ValueError: operands could not be broadcast together with shapes (4,3) (4,)

Adakah yang bisa menjelaskan kepada saya apa yang harus saya lakukan karena saya masih pemula?

0
lvdp 2 Desember 2017, 13:00

1 menjawab

Jawaban Terbaik

Alasan kesalahan yang Anda lihat adalah karena Anda tidak dapat menghitung

x - x.mean(1)

Karena

x.shape = (4, 3)
x.mean(1).shape = (4,)  # mean(), sum(), std() etc. remove the dimension they are applied to

Namun, Anda dapat melakukan operasi jika entah bagaimana kami dapat memastikan mean() mempertahankan dimensi yang diterapkan, menghasilkan

x.mean(1).shape = (4, 1)

(cari Aturan Penyiaran NumPy).

Karena ini adalah masalah umum, pengembang NumPy memperkenalkan parameter yang melakukan hal itu: keepdims=True, yang harus Anda gunakan di mean() dan std():

def standardize(x, axis=None):
    return (x - x.mean(axis, keepdims=True)) / x.std(axis, keepdims=True)
0
Nils Werner 2 Desember 2017, 11:17