Сравнение двух массивов с использованием цикла if - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь сравнить, если один массив больше, чем другой массив, используя оператор IF.

from scipy.stats import laplace
from pylab import hist, title
from numpy import random


n = 10000

r = laplace.rvs(size=n)
normal = random.random(n)
new = r/normal

naccept = 0 

if (new > normal):
    naccept = naccept + 1 
else: 
    pass

print('Acceptance fraction: ', naccept/n)

Я получаю следующую ошибку



  File "<ipython-input-64-b66ee75060af>", line 14, in <module>
    if (new > normal):

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Чего мне не хватает, потому что оба массива являются float64, поэтому они должны сравнивать и возвращать долю принятия.

1 Ответ

3 голосов
/ 05 октября 2019

При использовании numpy логическая операция над массивом приводит к логическому массиву.

Похоже, вы хотите подсчитать, сколько раз элемент в новом массиве находится над его аналогом в обычном массиве. ,Вы были почти там: просто посчитайте количество True элементов в логическом массиве new > normal:

from scipy.stats import laplace
import numpy as np 

n = 10000

r = laplace.rvs(size=n)
normal = np.random.random(n)
new = r/normal

# this counts the number of "True" (1) in the array (`False` is 0)
naccept = np.sum(new > normal)

print('Acceptance fraction: ', naccept/n)

выход:

Acceptance fraction:  0.3754
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...