Ich arbeite durch Projekt Euler Probleme.numpy.sum nicht erwarteten Wert
‚Finden Sie die Summe aller Primzahlen unter zwei Millionen‘
ich eine erstklassige checker gebaut haben, dass ich denke ziemlich schnell ist - jede Beratung auf, wie groß zu verbessern wäre.
Aber was ich die letzten 30 Minuten ausgearbeitet habe ist, dass np.sum nicht den richtigen Wert zurückgibt. Hier ist mein Code:
import numpy as np
def isprime(num, primelist):
#Give primelist it's first value if none exist
if len(primelist) == 0:
primelist.append(num)
return True
for primes in primelist:
#Only need to iterate up to square root of num to test primality
if primes <= math.sqrt(num):
#If any number is evenly divisble (remainder = 0) the num is not prime
if num % primes == 0:
#print('non-prime')
return False
break
#If we have iterated through all primes <= sqrt of num, num is prime
else:
primelist.append(num)
#print('prime')
return True
break
lim = 2000000
n = 3
primelist = [2]
while primelist[-1] <= lim:
isprime(n, primelist)
n += 1
if primelist[-1] > lim: primelist = primelist[:-1]
primearray = np.asarray(primelist)
print(np.sum(primearray))
sum = 0
for i in primelist:
sum = sum + i
print(sum)
Ich nehme an, es auch die np.asarray sein könnte, das nicht funktioniert, anstatt np.sum
Ich habe durch die ursprüngliche Liste iteriert den Wert numpy zu testen, wird zurückgegeben .
numpy sum = 1179908154
Iterieren sum = 142913828922
über 100-mal größer. Wo liege ich falsch?
Warum benutzen Sie überhaupt "numpy"? Summiere einfach die Primzahlen, während du sie erzeugst. Oder einfach 'sum (Primelist)'. Abgesehen davon werden Ihre 'break'-Anweisungen, die den' return'-Anweisungen folgen, niemals ausgeführt, so dass sie sinnlos sind. –
Die Liste wurde mit Ganzzahlen bevölkert, die nicht mit der Summe arbeiten, schien einfach zu array und summieren sich mit numpy. Sie haben recht mit den Pausen :) Sie waren ein bisschen von einer früheren Version des Codes, entfernt sie jetzt. Vielen Dank –