Saya telah menghitung kesamaan kosinus dari tweet, yang telah saya masukkan my_matrix. Sekarang saya ingin mendapatkan skor kesamaan tertinggi.

cos = cosine(my_matrix)
cos

cos memberi saya array matriks dengan semua nilai di dalamnya. Outputnya terlihat seperti ini:

           1         2         3         4         5         6         7         8
1  1.0000000  0.5568073  0.3901539  0.5621206  0.2816833  0.2160066  0.2605051  0.2115766
2  0.5568073  1.0000000  0.6526458  0.7140950  0.4307470  0.3033117  0.2941557  0.3437280
3  0.3901539  0.6526458  1.0000000  0.5650099  0.3252116  0.2494666  0.2453746  0.3903765
4  0.5621206  0.7140950  0.5650099  1.0000000  0.4033797  0.2911018  0.3459270  0.3239339
5  0.2816833  0.4307470  0.3252116  0.4033797  1.0000000  0.2501818  0.1925585  0.1905618
6  0.2160066  0.3033117  0.2494666  0.2911018  0.2501818  1.0000000  0.1378479  0.2054312
7  0.2605051  0.2941557  0.2453746  0.3459270  0.1925585  0.1378479  1.0000000  0.1320529
8  0.2115766  0.3437280  0.3903765  0.3239339  0.1905618  0.2054312  0.1320529  1.0000000
9  0.4836184  0.6940823  0.5820808  0.7131646  0.4122365  0.2808218  0.3132991  0.3311042
10 0.3097645  0.3486836  0.2695222  0.3268555  0.1954665  0.1239200  0.1436308  0.1333930

Sekarang saya ingin mengulangi matriks ini dan mendapatkan nilai tertinggi dari matriks ini, kecuali 1 (karena baris 1 dan kolom 1 = 1, baris 2 dan kolom 2 = 2 ...).

Output yang ingin saya dapatkan dalam contoh ini adalah 0.7140950 di baris 4 dan kolom 2, karena ini adalah nilai terbesar kedua setelah 1. Sejauh ini saya telah mencoba loop for ganda, untuk mengulangi baris dan kolom , tetapi ini tidak berhasil sama sekali dan saya tidak tahu bagaimana melanjutkannya.

biggest_value = 0 

for(row in 1:nrow(party_m)) {
  for(col in 1:ncol(party_m)) {
        if(my_matrix[row, col] > biggest_value ){
           biggest_value = my_matriy[row,col]
        }
  }
}

Apakah ada yang punya solusi untuk ini?

1
Maxl Gemeinderat 12 Mei 2021, 16:23

2 jawaban

Jawaban Terbaik
diag(cos) <- 0

which(cos == max(cos), arr.ind = TRUE)

Perhatikan bahwa karena matriks Anda simetris, Anda akan mendapatkan beberapa nilai maks, mis. baris 4, kolom 2 dan baris 2, kolom 4.

Anda dapat mengatur segitiga atas menjadi hilang terlebih dahulu untuk mencegah hal ini:

cos[upper.tri(cos, diag = TRUE)] <- NA

Lalu gunakan fungsi which.

2
deschen 12 Mei 2021, 14:06

Mungkin kode Anda tidak berfungsi karena Anda salah ketik biggest_value = my_matriy[row,col], bukan biggest_value = my_matrix[row,col], meskipun saya belum menjalankannya untuk mengetahuinya.

Seperti disebutkan dalam komentar, Anda dapat mengatur elemen diagonal matriks menjadi 0, dan kemudian menentukan nilai maksimum dalam matriks. Anda tidak memiliki nilai negatif, tetapi secara umum, Anda mungkin lebih memilih untuk mendapatkan nilai absolut maksimum sebagai gantinya / juga, jika asosiasi terkuat diinginkan. Untuk menemukan pasangan mana yang menghasilkan nilai tersebut, gunakan ? yang. Mempertimbangkan:

diag(cos) <- 0 
max(cos)
# [1] 0.714095
which(cos==max(cos), arr.ind=TRUE) 
#      row col
# [1,]   4   2
# [2,]   2   4
1
gung - Reinstate Monica 12 Mei 2021, 16:15