Saya ingin dapat dengan cepat menentukan apakah kernel 2D yang diberikan koefisien integer dapat dipisahkan menjadi dua kernel 1D dengan koefisien integer. Misalnya
2 3 2
4 6 4
2 3 2
dipisahkan menjadi
2 3 2
dan
1
2
1
Tes sebenarnya untuk pemisahan tampaknya cukup mudah menggunakan aritmatika integer, tetapi penguraian menjadi filter 1D dengan koefisien integer terbukti menjadi masalah yang lebih sulit. Kesulitan tampaknya terletak pada kenyataan bahwa rasio antara baris atau kolom mungkin non-integer (fraksi rasional), misalnya dalam contoh di atas kita memiliki rasio 2, 1/2, 3/2 dan 2/3.
Saya tidak benar-benar ingin menggunakan pendekatan tugas berat seperti SVD karena (a) ini relatif mahal secara komputasi untuk kebutuhan saya dan (b) masih belum tentu membantu untuk menentukan koefisien integer .
Ada ide?
INFORMASI LEBIH LANJUT
Koefisien mungkin positif, negatif atau nol, dan mungkin ada kasus patologis di mana jumlah salah satu atau kedua vektor 1D adalah nol, misalnya
-1 2 -1
0 0 0
1 -2 1
dipisahkan menjadi
1 -2 1
dan
-1
0
1
sumber
Jawaban:
Saya telah mengambil
@Phonon
jawaban dan memodifikasinya sehingga menggunakan pendekatan GCD pada baris atas dan kolom kiri, bukan pada jumlah baris / kolom. Ini tampaknya menangani kasus-kasus patologis sedikit lebih baik. Itu masih bisa gagal jika baris atas atau kolom kiri semuanya nol, tetapi kasing ini dapat diperiksa sebelum menerapkan metode ini.Banyak terima kasih kepada
@Phonon
dan@Jason R
untuk ide-ide orisinal untuk ini.sumber
Oke! Posting kode MATLAB, akan memposting penjelasan malam ini atau besok
sumber
A=[-2 1 0 -1 2]; B=[2 -3 6 0 -1]; M=A'*B;
. Masalahnya di sini adalahsum(A) = 0
begituSb = [0 0 0 0 0]
. Saya akan mencoba memodifikasi algoritma Anda sehingga menggunakan jumlah nilai absolut dari koefisien dan melihat apakah itu membantu. Sekali lagi terima kasih atas bantuan Anda.abs(M)
, yaituSa=abs(M)*ones(N,1); Sb=ones(1,N)*abs(M);
dan kemudian melanjutkan seperti di atas, tapi saya belum bisa melihat cara mengembalikan tanda keSa
,Sb
pada akhirnya. Saya telah menambahkan contoh patologis yang menggambarkan masalah dalam pertanyaan asli di atas.Mungkin saya meremehkan masalahnya, tetapi sepertinya Anda bisa:
Bukan metode yang paling elegan, dan kemungkinan ada cara yang lebih baik, tetapi harus bekerja, cukup sederhana untuk diterapkan, dan harus relatif cepat untuk matriks berukuran sedang.
sumber
(Dari perkiraan-konvolusi-sebagai-jumlah-konvolusi-terpisah pada math.stackexchange.)
sumber