'The sum of the products of a two-dimensional array python

I have 2 arrays of a million elements (created from an image with the brightness of each pixel) I need to get a number that is the sum of the products of the array elements of the same name. That is, A(1,1) * B(1,1) + A(1,2) * B(1,2)... In the loop, python takes the value of the last variable from the loop (j1) and starts running through it, then adds 1 to the penultimate variable and runs through the last one again, and so on. How can I make it count elements of the same name? res1, res2 - arrays (specifically - numpy.ndarray) Perhaps there is a ready-made function for this, but I need to make it as open as possible, without a ready-made one.

sum = 0
for i in range(len(res1)):
    for j in range(len(res2[i])):
        for i1 in range(len(res2)):
                for j1 in range(len(res1[i1])):
                    sum += res1[i][j]*res2[i1][j1]


Solution 1:[1]

Solution 1:

import numpy as np

a,b = np.array(range(100)), np.array(range(100))

print((a * b).sum())

Solution 2 (more open, because of use of pd.DataFrame):

import pandas as pd
import numpy as np

a,b = np.array(range(100)), np.array(range(100))

df = pd.DataFrame(dict({'col1': a, 'col2': b}))

df['vect_product'] = df.col1 * df.col2

print(df['vect_product'].sum())

Solution 2:[2]

Two simple and fast options using numpy are: (A*B).sum() and np.dot(A.ravel(),B.ravel()). The first method sums all elements of the element-wise multiplication of A and B. np.sum() defaults to sum(axis=None), so we will get a single number. In the second method, you create a 1D view into the two matrices and then apply the dot-product method to get a single number.

import numpy as np

A = np.random.rand(1000,1000)
B = np.random.rand(1000,1000)

s = (A*B).sum()  # method 1
s = np.dot(A.ravel(),B.ravel())  # method 2

The second method should be extremely fast, as it doesn't create new copies of A and B but a view into them, so no extra memory allocations.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sergiusz
Solution 2