У меня есть двоичный двумерный массив numpy, который представляет транзакции и элементы. Для товара I (представленного в виде столбцов) я хочу вычислить общее количество транзакций (представленных в виде строк), в ходе которых был приобретен этот товар, всех товаров, которые были приобретены вместе с товаром i, и всех транзакций, связанных с этими товарами. Это делается для расчета поддержки, уверенности и подъема между элементами. Моя текущая реализация использует вложенный цикл, но для большого набора данных это занимает слишком много времени. Есть ли способ оптимально сканировать матрицу, когда мне нужно каждый раз сканировать ее целиком?
Вот мой код с примером массива.
data = np.array([0,1,0,1],[1,1,0,1],[0,0,0,1],[1,1,1,1])
N = data.shape[0] #total transactions
for i in range(4): # for each item i
#transactions% where item i was purchased
mask_i = data[:,i] == 1
support_i = data[mask_i].shape[0]/N
for j in range(4): # check all items j
#transactions where both i and j are purchased
mask_j = data[:,j] == 1
support_j = data[mask_j].shape[0]/N #transactions% where j is purchased
mask_c = np.logical_and(mask_i,mask_j) # mask for where both i and j were purchased
confidence = (data[mask_c].shape[0]/N) / support_i
lift = confidence/support_j
// store i, j, confidence, lift in an array (indices i and j are important to store)
Подробнее здесь: https://stackoverflow.com/questions/786 ... mpy-matrix