cari
Rumahpembangunan bahagian belakangTutorial PythonBagaimanakah Saya Boleh Mewajarkan Elemen dengan Cekap dalam Tatasusunan NumPy?

How Can I Efficiently Justify Elements in a NumPy Array?

Mewajarkan Tatasusunan NumPy

Pengenalan

Dalam Python, NumPy menyediakan alatan yang cekap untuk pengiraan berangka . Satu cabaran biasa ialah mewajarkan elemen dalam tatasusunan NumPy, menjajarkannya ke kiri, kanan, atas atau bawah. Artikel ini membentangkan penyelesaian yang dipertingkat menggunakan pendekatan vektor.

Penyelesaian Vektor

Fungsi justify membenarkan elemen dalam tatasusunan 2D, menolaknya ke yang ditentukan sebelah.

def justify(a, invalid_val=0, axis=1, side='left'):
    justified_mask = np.sort(a!=invalid_val, axis=axis)
    if (side=='up') or (side=='left'):
        justified_mask = np.flip(justified_mask,axis=axis)
    out = np.full(a.shape, invalid_val)
    if axis==1:
        out[justified_mask] = a[a!=invalid_val]
    else:
        out.T[justified_mask.T] = a.T[a.T!=invalid_val]
    return out

Penggunaan

a = np.array([[1, 0, 2, 0],
               [3, 0, 4, 0],
               [5, 0, 6, 0],
               [0, 7, 0, 8]])

print(justify(a, axis=0, side='up'))  # Justify values vertically "up"
print(justify(a, axis=0, side='down'))  # Justify values vertically "down"
print(justify(a, axis=1, side='left'))  # Justify values horizontally "left"
print(justify(a, axis=1, side='right'))  # Justify values horizontally "right"

Output

[[1, 7, 2, 8]
 [3, 0, 4, 0]
 [5, 0, 6, 0]
 [0, 0, 0, 0]]

[[0, 0, 0, 0]
 [1, 0, 2, 0]
 [3, 0, 4, 0]
 [5, 7, 6, 8]]

[[1, 2, 0, 0]
 [3, 4, 0, 0]
 [5, 6, 0, 0]
 [0, 7, 0, 8]]

[[0, 0, 1, 2]
 [0, 0, 3, 4]
 [0, 0, 5, 6]
 [0, 0, 7, 8]]

Pelanjutan kepada Kes Generik

Fungsi justify_nd memanjangkan pendekatan ini untuk mewajarkan elemen dalam ndarray mana-mana dimensi.

def justify_nd(a, invalid_val, axis, side):
    justified_mask = np.sort(a!=invalid_val, axis=axis)
    if side=='front':
        justified_mask = np.flip(justified_mask,axis=axis)
    out = np.full(a.shape, invalid_val)
    pushax = lambda a: np.moveaxis(a, axis, -1)
    if (axis==-1) or (axis==a.ndim-1):
        out[justified_mask] = a[a!=invalid_val]
    else:
        pushax(out)[pushax(justified_mask)] = pushax(a)[pushax(a!=invalid_val)]
    return out

Penggunaan (Kes Generik)

a = np.array([[[54, 57,  0, 77],
                       [77,  0,  0, 31],
                       [46,  0,  0, 98],
                       [98, 22, 68, 75]],

                   [[49,  0,  0, 98],
                       [ 0, 47,  0, 87],
                       [82, 19,  0, 90],
                       [79, 89, 57, 74]],

                   [[ 0,  0,  0,  0],
                       [29,  0,  0, 49],
                       [42, 75,  0, 67],
                       [42, 41, 84, 33]],

                   [[ 0,  0,  0, 38],
                       [44, 10,  0,  0],
                       [63,  0,  0,  0],
                       [89, 14,  0,  0]]])

print(justify_nd(a, invalid_val=0, axis=0, side='front'))  # Justify first dimension "front"
print(justify_nd(a, invalid_val=0, axis=1, side='front'))  # Justify second dimension "front"
print(justify_nd(a, invalid_val=0, axis=2, side='front'))  # Justify third dimension "front"
print(justify_nd(a, invalid_val=0, axis=2, side='end'))  # Justify third dimension "end"

Output

[[[54, 57,  0, 77],
  [77, 47,  0, 31],
  [46, 19,  0, 98],
  [98, 22, 68, 75]],

 [[49,  0,  0, 98],
  [29, 10,  0, 87],
  [82, 75,  0, 90],
  [79, 89, 57, 74]],

 [[ 0,  0,  0, 38],
  [44,  0,  0, 49],
  [42,  0,  0, 67],
  [42, 41, 84, 33]],

 [[ 0,  0,  0,  0],
  [ 0,  0,  0,  0],
  [63,  0,  0,  0],
  [89, 14,  0,  0]]]

[[[54, 57, 68, 77],
  [77, 22,  0, 31],
  [46,  0,  0, 98],
  [98,  0,  0, 75]],

 [[49, 47, 57, 98],
  [82, 19,  0, 87],
  [79, 89,  0, 90],
  [ 0,  0,  0, 74]],

 [[29, 75, 84, 49],
  [42, 41,  0, 67],
  [42,  0,  0, 33],
  [ 0,  0,  0,  0]],

 [[44, 10,  0, 38],
  [63, 14,  0,  0],
  [89,  0,  0,  0],
  [ 0,  0,  0,  0]]]

[[[ 0, 54, 57, 77],
  [ 0,  0, 77, 31],
  [ 0,  0, 46, 98],
  [98, 22, 68, 75]],

 [[ 0,  0, 49, 98],
  [ 0,  0, 47, 87],
  [ 0, 82, 19, 90],
  [79, 89, 57, 74]],

 [[ 0,  0,  0,  0],
  [ 0,  0, 29, 49],
  [ 0, 42, 75, 67],
  [42, 41, 84, 33]],

 [[ 0,  0,  0, 38],
  [ 0,  0, 44, 10],
  [ 0,  0,  0, 63],
  [ 0,  0, 89, 14]]]

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mewajarkan Elemen dengan Cekap dalam Tatasusunan NumPy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimana anda membuat tatasusunan pelbagai dimensi menggunakan numpy?Bagaimana anda membuat tatasusunan pelbagai dimensi menggunakan numpy?Apr 29, 2025 am 12:27 AM

Buat tatasusunan pelbagai dimensi dengan numpy dapat dicapai melalui langkah-langkah berikut: 1) Gunakan fungsi numpy.array () untuk membuat array, seperti Np.Array ([[1,2,3], [4,5,6]]) untuk membuat array 2D; 2) Gunakan np.zeros (), np.ones (), np.random.random () dan fungsi lain untuk membuat array yang diisi dengan nilai tertentu; 3) Memahami sifat bentuk dan saiz array untuk memastikan bahawa panjang sub-array adalah konsisten dan mengelakkan kesilapan; 4) Gunakan fungsi np.reshape () untuk mengubah bentuk array; 5) Perhatikan penggunaan memori untuk memastikan bahawa kod itu jelas dan cekap.

Terangkan konsep 'penyiaran' dalam array Numpy.Terangkan konsep 'penyiaran' dalam array Numpy.Apr 29, 2025 am 12:23 AM

Broadcastinginginnumpyisamethodtoperformoperationsonarraysofdifferentshapesbyautomaticallyaligningthem.itsImplifiescode, enhancesreadability, andboostsperformance.here'showitworks: 1) smallerarraysarepaddedwithonestomatchdimensions.2) CompatibeSt

Terangkan cara memilih antara senarai, array.array, dan array numpy untuk penyimpanan data.Terangkan cara memilih antara senarai, array.array, dan array numpy untuk penyimpanan data.Apr 29, 2025 am 12:20 AM

Forpythondatastorage, chooselistsforflexabilityWithMixedDatatypes, array.arrayformemory-efficienthomogeneousnumericaldata, andnumpyarraysforadvancednumericalcomputing.listsareversatileButlessefficefientfientfientfientfientfientfientfientfientfientfientfientforydodeSforayDataSetSetShiSforayDataSetSetShiSforayDataSetSetShiSforayDataSetSetShoFficeSforaydataSetShoSforayDataSetsforayDataSetsforayDataSetsforaydataSetShiSforayDodeSforayDodeSforaydataSetRaydataSetRaydataSetRaydataSet

Berikan contoh senario di mana menggunakan senarai python akan lebih sesuai daripada menggunakan array.Berikan contoh senario di mana menggunakan senarai python akan lebih sesuai daripada menggunakan array.Apr 29, 2025 am 12:17 AM

Pythonlistsarebetterthanarraysformanagingdiversedatatypes.1) listscanholdelementsofdifferenttypes, 2) thearedynamic, membolehkanEaseasyAdditionsandremoVals, 3) theofferintuitiitiveoperationslikeslicing, tetapi4).

Bagaimana anda mengakses elemen dalam pelbagai python?Bagaimana anda mengakses elemen dalam pelbagai python?Apr 29, 2025 am 12:11 AM

ToAccessElementsInapyThonArray, useIndexing: my_array [2] AccessestHeTheRdeLement, returning3.pythonuseszero-berasaskanIndexing.1) USE sitiveandnegativeindexing: my_list [0] forthefirstelement, my_list [-1] forthelast.2) menggunakanSlicingForarangange: my_list [1: 5] ekstrakSelemen

Adakah pemahaman tuple mungkin di Python? Jika ya, bagaimana dan jika tidak mengapa?Adakah pemahaman tuple mungkin di Python? Jika ya, bagaimana dan jika tidak mengapa?Apr 28, 2025 pm 04:34 PM

Artikel membincangkan kemustahilan pemahaman tuple di Python kerana kekaburan sintaks. Alternatif seperti menggunakan tuple () dengan ekspresi penjana dicadangkan untuk mencipta tupel dengan cekap. (159 aksara)

Apakah modul dan pakej dalam Python?Apakah modul dan pakej dalam Python?Apr 28, 2025 pm 04:33 PM

Artikel ini menerangkan modul dan pakej dalam Python, perbezaan, dan penggunaannya. Modul adalah fail tunggal, manakala pakej adalah direktori dengan fail __init__.py, menganjurkan modul yang berkaitan secara hierarki.

Apa itu Docstring dalam Python?Apa itu Docstring dalam Python?Apr 28, 2025 pm 04:30 PM

Artikel membincangkan docstrings dalam python, penggunaan, dan faedah mereka. Isu Utama: Kepentingan Docstrings untuk Dokumentasi Kod dan Kebolehcapaian.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma