Python function returns incorrect value

Dan Pollard

I have a function in python that uses for loops to generate an array;

from pylab import *

r0 = 3.
radius = 3*r0
signal_centre_i = randint(radius,100-radius)
signal_centre_j = randint(radius,100-radius)
bg_score = 30
SN_ratio = 1.
S0 = 10.
signal_score = 0
def generate_signal():
    signal_array = zeros((101,101))
    for i in range(101):
        for j in range(101):
            r = ((i-signal_centre_i)**2 + (j-signal_centre_j)**2)**0.5
            signal_array[i,j] = signal_array[i,j] + S0*(1+((r/r0)**2))**-1.5
    signal_score = 0
    for i in range(101):
        for j in range(101):
            if ((i - signal_centre_i)**2 + (j-signal_centre_j)**2)**0.5 <= radius:
                signal_score = signal_array[i,j] + signal_score
            elif (((i - signal_centre_i)**2 + (j-signal_centre_j)**2)**0.5 <= radius +1) and ((i - signal_centre_i)**2 + (j-signal_centre_j)**2)**0.5 > radius:
                signal_array[i,j] = 10
    return signal_score

generate_signal()

while (((signal_score/bg_score)**0.5) < SN_ratio - SN_ratio/2) or (((signal_score/bg_score)**0.5) > SN_ratio + SN_ratio/2):
    if (signal_score/bg_score)**0.5 > SN_ratio:
        print "Calculated SN: "+str((signal_score/bg_score)**0.5)
        S0 = S0 - S0/10
        print "S0: "+str(S0)
        print "Signal score: "+str(signal_score)
        generate_signal()
    elif (signal_score/bg_score)**0.5 < SN_ratio:
        print "Calculated SN: "+str((signal_score/bg_score)**0.5)
        S0 = S0 + S0/10
        print "S0: "+str(S0)
        print "Signal score: " +str(signal_score)
        generate_signal()

I'm really sorry for the wall of code - if there's a better way to format it then please let me know.

The code takes a 101x101 array and places a random 'signal' on it (so when you use the imshow() function, you get a bright spot). However, when I run this code, the signal score does not update - I expect it to print the total value of the array within a circle around the centre of the source, and then update the equation so that the value tends towards a predetermined value. However, this does not happen, and signal score stays at zero.

I have used loops of the form

for i in range(101):
    for j in range(101):
        if ((i - centre_i)**2 + (j - centre_j)**2)**0.5 <= radius:
             score = score + array[i,j]

many times in the past for the same purpose, with no problems.

What am I doing wrong?

Daniel Roseman

You ignore the return value from your generate_signal function every time you call it. You need to assign it to the signal_score variable in the module scope.

signal_score = generate_signal()

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  3. 3

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  4. 4

    pump.io port in URL

  5. 5

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

  9. 9

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  10. 10

    How to remove the extra space from right in a webview?

  11. 11

    java.lang.NullPointerException: Cannot read the array length because "<local3>" is null

  12. 12

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  13. 13

    flutter: dropdown item programmatically unselect problem

  14. 14

    How to use merge windows unallocated space into Ubuntu using GParted?

  15. 15

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  16. 16

    Nuget add packages gives access denied errors

  17. 17

    Svchost high CPU from Microsoft.BingWeather app errors

  18. 18

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  19. 19

    12.04.3--- Dconf Editor won't show com>canonical>unity option

  20. 20

    Any way to remove trailing whitespace *FOR EDITED* lines in Eclipse [for Java]?

  21. 21

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

HotTag

Archive