Tôi có hai vectơ giá trị và một vectơ có trọng số, và tôi cần tính toán độ tương tự cosin. Vì những lý do phức tạp, tôi chỉ có thể tính cosin cho một cặp tại một thời điểm. Nhưng tôi phải làm điều đó hàng triệu lần.tính toán R cosin hiệu quả nhất
cosine_calc <- function(a,b,wts) {
#scale both vectors by the weights, then compute the cosine of the scaled vectors
a = a*wts
b = b*wts
(a %*% b)/(sqrt(a%*%a)*sqrt(b%*%b))
}
hoạt động, nhưng tôi muốn cố gắng cải thiện hiệu suất tốt hơn.
Ví dụ dữ liệu:
a = c(-1.2092420, -0.7053822, 1.4364633, 1.3612304, -0.3029147, 1.0319704, 0.6707610, -2.2128987, -0.9839970, -0.4302205)
b = c(-0.69042619, 0.05811749, -0.17836802, 0.15699691, 0.78575477, 0.27925779, -0.08552864, -1.31031219, -1.92756861, -1.36350112)
w = c(0.26333839, 0.12803180, 0.62396023, 0.37393705, 0.13539926, 0.09199102, 0.37347546, 1.36790007, 0.64978409, 0.46256891)
> cosine_calc(a,b,w)[,1]
[1,] 0.8390671
question này chỉ ra rằng có những chức năng được xác định trước cosin khác có sẵn trong R, nhưng không nói gì về tính hiệu quả tương đối của chúng.
chỉ có khả năng để làm điều đó một cặp tại một thời điểm sẽ là một nút cổ chai lớn ... –
Tôi ghét phải phá vỡ nó cho bạn, nhưng trong kinh nghiệm của tôi, R dường như không được xây dựng cho hiệu suất (tương đối nói). Nếu dữ liệu này là từ một cơ sở dữ liệu quan hệ, bạn có thể muốn xem xét tính toán các điểm tương đồng ở đó và sau đó xuất sang R. Hầu hết những gì tôi sử dụng R là phân tích quy mô nhỏ (ví dụ trên các bộ dữ liệu sau khi tôi đã thực hiện một số lượng đáng kể tổng hợp) và sản xuất đồ họa. –
Tại sao bạn không tiếp tục và đánh giá các ví dụ được liệt kê trong http://stackoverflow.com/questions/2535234/find-cosine-similarity-in-r/2536149#2536149 (tức là câu hỏi bạn đã liên kết; @JoshUlrich hiển thị cho bạn làm thế nào trong câu trả lời của mình) và xem cho chính mình? –