<p>numpy.concat tampaknya tidak berfungsi di seluruh sumbu siaran (Trac # 1518)</p>

Dibuat pada 19 Okt 2012  ·  11Komentar  ·  Sumber: numpy/numpy

_Tiket asli http://projects.scipy.org/numpy/ticket/1518 pada 2010-06-22 oleh trac user eob, ditetapkan ke tidak diketahui._

Saat saya mencoba untuk menggabungkan dua tensor bersama-sama, operasi penggabungan tidak memungkinkan saya untuk menggunakan dimensi siaran (menggunakan sumbu baru) di salah satunya.

00 - Bug Other

Komentar yang paling membantu

Saya menemukan solusi yang tampaknya solid bagi saya ... cukup gunakan broadcast_arrays dalam bentuk np.concatenate(np.broadcast_arrays(*arrays), axis=...) . Contoh: np.concatenate(np.broadcast_arrays(0, [1, 2], [[3, 4], [5, 6]]), axis=1)array([[0, 0, 1, 2, 3, 4], [0, 0, 1, 2, 5, 6]])

Semua 11 komentar

_trac user eob menulis pada 2010-06-22_

Catatan: solusi yang kami gunakan adalah dengan menyusun numpy.array tempat kami ingin menggunakan sumbu baru, yang berfungsi tetapi dengan mengorbankan memori.

_ @ pv menulis pada 2010-06-24_

Dapatkah Anda menulis bagian kode contoh mandiri yang menunjukkan apa yang Anda coba lakukan, apa yang Anda inginkan terjadi, dan apa yang sebenarnya terjadi.

Dari uraian Anda, tidak sepenuhnya jelas bagi saya bagaimana Anda ingin segala sesuatunya bekerja.

_ @ pv menulis pada 2010-06-24_

Jika Anda bersungguh-sungguh,

>>> x = np.array([1,2,3,4])
>>> y = np.array([[1,2],[3,4],[5,6],[7,8]])
>>> np.concatenate((y, np.tile(x, (4,1))), axis=1)
array([[1, 2, 1, 2, 3, 4],
       [3, 4, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4],
       [7, 8, 1, 2, 3, 4]])

Anda dapat melakukannya tanpa salinan:

def broadcast_view(x, ref):
    """Broadcast unit dimensions in `x` to match those in `ref` without copies"""
    strides = [0 if x.shape[j] == 1 else x.strides[j] for j in range(x.ndim)]
    shape = [ref.shape[j] if x.shape[j] == 1 else x.shape[j] for j in range(x.ndim)]
    from numpy.lib.stride_tricks import as_strided
    return as_strided(x, shape=shape, strides=strides)

>>> x = np.array([1,2,3,4])
>>> y = np.array([[1,2],[3,4],[5,6],[7,8]])
>>> np.concatenate((y, broadcast_view(x[None,:], y)), axis=1)
array([[1, 2, 1, 2, 3, 4],
       [3, 4, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4],
       [7, 8, 1, 2, 3, 4]])
>>> broadcast_view(x[None,:], y).base.base.base is x
True

Tapi ya, saya kira np.concatenate harus melakukan ini secara otomatis.

Ada berita / kemajuan tentang np.concatenate mendukung penyiaran?

Ada beberapa diskusi tentang ini di daftar di masa lalu, dan kebijaksanaan kolektif menentukan bahwa penyiaran dalam operasi gabungan lebih mungkin untuk menutupi kesalahan yang tidak diinginkan, daripada fungsi yang berguna. Kami mungkin harus menutup ini.

Bagaimanapun, jika Anda ingin memulai percakapan itu lagi, tempat yang tepat adalah milis, bukan di sini.

Haruskah ini ditutup karena "tidak bisa diperbaiki"?

Sepakat. Perhatikan bahwa penyiaran manual sekarang sedikit lebih mudah karena kami memiliki broadcast_to.

Saya hanya butuh sedikit penguatan positif, tutup saja. Jika ada yang memiliki pendapat kuat tentang ini, silakan buka kembali.

Saya menemukan solusi yang tampaknya solid bagi saya ... cukup gunakan broadcast_arrays dalam bentuk np.concatenate(np.broadcast_arrays(*arrays), axis=...) . Contoh: np.concatenate(np.broadcast_arrays(0, [1, 2], [[3, 4], [5, 6]]), axis=1)array([[0, 0, 1, 2, 3, 4], [0, 0, 1, 2, 5, 6]])

@davidmashburn Saya pikir ada masalah dengan solusi ini (dan dengan penyiaran manual secara umum seperti yang disarankan oleh orang lain di utas ini). Saya rasa tidak masuk akal untuk menyiarkan dalam dimensi saat kita menggabungkan. Dengan kata lain, dalam kasus Anda, saya hanya berharap untuk berakhir dengan satu kolom nol.

Jika orang lain juga menemukan Masalah ini, saat mencari solusi penyiaran secara bersamaan, saya memposting solusi saya di https://stackoverflow.com/questions/56357047/concatenate-with-broadcast/61061019#61061019

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

kevinzhai80 picture kevinzhai80  ·  4Komentar

astrofrog picture astrofrog  ·  4Komentar

Kreol64 picture Kreol64  ·  3Komentar

marcocaccin picture marcocaccin  ·  4Komentar

Levstyle picture Levstyle  ·  3Komentar