bwanab  
                
               
                 
              
                  
                    June 23, 2022,  3:36pm
                   
                   
              1 
               
             
            
              Matrix: X2, Vector: w2
What I’m trying to do is get the vector of dot products from each row of the matrix with the vector. The best I’ve come up with so far is:
sum(X2 .*  w2', dims=1)  
 
This works, but I have this nagging feeling that there’s a way to do it that makes it more obvious I’m doing dot products.
I benchmarked:
[dot(X2[i,:], w2) for i in 1:size(X2)[1]]
 
But, that’s an order of magnitude slower.
             
            
               
               
               
            
            
           
          
            
              
                nilshg  
                
               
              
                  
                    June 23, 2022,  3:55pm
                   
                   
              2 
               
             
            
              Could you clarify what output you are expecting? For
julia> X2 = reshape(1:6, 3, 2)
3×2 reshape(::UnitRange{Int64}, 3, 2) with eltype Int64:
 1  4
 2  5
 3  6
julia> w2 = [7, 8]
2-element Vector{Int64}:
 7
 8
 
your two proposed code snippets give:
julia> sum(X2 .*  w2', dims=1)
1×2 Matrix{Int64}:
 42  120
julia> [dot(X2[i,:], w2) for i in 1:size(X2)[1]]
3-element Vector{Int64}:
 39
 54
 69
 
The second looks more in line with your question (three rows and three elements in w2 yielding three dot products). If that’s indeed the output you’re after I’d suggest:
julia> X2 * w2
3-element Vector{Int64}:
 39
 54
 69
 
             
            
               
               
              1 Like 
            
            
           
          
            
              
                jling  
                
               
              
                  
                    June 23, 2022,  3:58pm
                   
                   
              3 
               
             
            
              shouldn’t
X2 * w2
julia> X2 = rand(1:3, 4, 3)
4×3 Matrix{Int64}:
 3  1  1
 1  2  3
 3  1  1
 2  3  3
julia> x2 = [1,2,3]
3-element Vector{Int64}:
 1
 2
 3
julia> X2 * x2
4-element Vector{Int64}:
  8
 14
  8
 17
 
just work?
             
            
               
               
              3 Likes 
            
            
           
          
            
              
                bwanab  
                
               
              
                  
                    June 23, 2022,  6:50pm
                   
                   
              4 
               
             
            
              You’re right. I’d been trying a bunch of different things in the repl, but I posted the wrong thing when I posted. It should have been:
sum(X2' .* w2, dims=1)
 
or
sum(X2 .* w2', dims=2)
 
But, I think the winner is X2 * w2. Stupid of me for not thinking of that, but thanks to you guys for looking at it and setting me on the right path!
             
            
               
               
              1 Like