Ответ 1
Симпы не повторяются. Итерация по массиву numpy поражает цель использования инструмента.
ans = np.logical_and(
np.logical_and(array1 != 0, array2 != 0),
array1 == array2 )
должно дать правильное решение.
У меня есть два одинаковых размера массива numpy (они бывают 48x365), где каждый элемент равен -1, 0 или 1. Я хочу сравнить эти два и посмотреть, сколько раз они одинаковы и сколько раз они отличаются друг от друга при дисконтировании всех времен, когда по крайней мере один из массивов имеет нулевое значение в качестве данных. Например:
for x in range(48):
for y in range(365):
if array1[x][y] != 0:
if array2[x][y] != 0:
if array1[x][y] == array2[x][y]:
score = score + 1
else:
score = score - 1
return score
Это занимает очень много времени. Я думал, чтобы воспользоваться тем фактом, что умножение элементов вместе и суммирование всех ответов могут дать тот же результат, и я ищу специальную функцию numpy, чтобы помочь с этим. Я не совсем уверен, что необычная функция numpy.
Симпы не повторяются. Итерация по массиву numpy поражает цель использования инструмента.
ans = np.logical_and(
np.logical_and(array1 != 0, array2 != 0),
array1 == array2 )
должно дать правильное решение.
Для меня самый простой способ - сделать это:
A = numpy.array()
B = numpy.array()
T = A - B
max = numpy.max(numpy.abs(T))
epsilon = 1e-6
if max > epsilon:
raise Exception("Not matching arrays")
Это позволяет быстро узнать, если массивы одинаковы и позволяют сравнивать значения float!
Простые вычисления в следующих строках помогут вам выбрать наиболее подходящий способ обработки вашего дела:
In []: A, B= randint(-1, 2, size= (48, 365)), randint(-1, 2, size= (48, 365))
In []: ignore= (0== A)| (0== B)
In []: valid= ~ignore
In []: (A[valid]== B[valid]).sum()
Out[]: 3841
In []: (A[valid]!= B[valid]).sum()
Out[]: 3849
In []: ignore.sum()
Out[]: 9830
Обеспечение правильности вычислений:
In []: 3841+ 3849+ 9830== 48* 365
Out[]: True
Поэтому ваш score
(с этими случайными значениями) будет:
In []: a, b= A[valid], B[valid]
In []: score= (a== b).sum()- (a!= b).sum()
In []: score
Out[]: -8
import numpy as np
A = np.array()
B = np.array()
...
Z = np.array()
to_test = np.array([A, B, .., Z])
# compare linewise if all lines are equal
np.all(map(lambda x: np.all(x==to_test[0,:]), to_test[1:,:]))