mirror of https://github.com/jlizier/jidt
Updating python code to be compatible with both python 2 and 3. (Includes changing xrange -> range, and removing ";", as found by Michael Wibral)
This commit is contained in:
parent
2928dafa12
commit
192ad12bb2
|
|
@ -29,9 +29,9 @@ jarLocation = "../../infodynamics.jar"
|
|||
startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=" + jarLocation)
|
||||
|
||||
# Generate some random binary data.
|
||||
sourceArray = [random.randint(0,1) for r in xrange(100)]
|
||||
destArray = [0] + sourceArray[0:99];
|
||||
sourceArray2 = [random.randint(0,1) for r in xrange(100)]
|
||||
sourceArray = [random.randint(0,1) for r in range(100)]
|
||||
destArray = [0] + sourceArray[0:99]
|
||||
sourceArray2 = [random.randint(0,1) for r in range(100)]
|
||||
|
||||
# Create a TE calculator and run it:
|
||||
teCalcClass = JPackage("infodynamics.measures.discrete").TransferEntropyCalculatorDiscrete
|
||||
|
|
|
|||
|
|
@ -31,17 +31,17 @@ jarLocation = "../../infodynamics.jar"
|
|||
startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=" + jarLocation)
|
||||
|
||||
# Create many columns in a multidimensional array, e.g. for fully random values:
|
||||
# twoDTimeSeriesOctave = [[random.randint(0,1) for y in xrange(2)] for x in xrange(10)] # for 10 rows (time-steps) for 2 variables
|
||||
# twoDTimeSeriesOctave = [[random.randint(0,1) for y in range(2)] for x in range(10)] # for 10 rows (time-steps) for 2 variables
|
||||
|
||||
# However here we want 2 rows by 100 columns where the next time step (row 2) is to copy the
|
||||
# value of the column on the left from the previous time step (row 1):
|
||||
numObservations = 100
|
||||
row1 = [random.randint(0,1) for r in xrange(numObservations)]
|
||||
row1 = [random.randint(0,1) for r in range(numObservations)]
|
||||
row2 = [row1[numObservations-1]] + row1[0:numObservations-1] # Copy the previous row, offset one column to the right
|
||||
twoDTimeSeriesPython = []
|
||||
twoDTimeSeriesPython.append(row1)
|
||||
twoDTimeSeriesPython.append(row2)
|
||||
twoDTimeSeriesJavaInt = JArray(JInt, 2)(twoDTimeSeriesPython); # 2 indicating 2D array
|
||||
twoDTimeSeriesJavaInt = JArray(JInt, 2)(twoDTimeSeriesPython) # 2 indicating 2D array
|
||||
|
||||
# Create a TE calculator and run it:
|
||||
teCalcClass = JPackage("infodynamics.measures.discrete").TransferEntropyCalculatorDiscrete
|
||||
|
|
|
|||
|
|
@ -30,29 +30,29 @@ jarLocation = "../../infodynamics.jar"
|
|||
startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=" + jarLocation)
|
||||
|
||||
# Generate some random normalised data.
|
||||
numObservations = 1000;
|
||||
covariance=0.4;
|
||||
numObservations = 1000
|
||||
covariance=0.4
|
||||
# Source array of random normals:
|
||||
sourceArray = [random.normalvariate(0,1) for r in xrange(numObservations)];
|
||||
sourceArray = [random.normalvariate(0,1) for r in range(numObservations)]
|
||||
# Destination array of random normals with partial correlation to previous value of sourceArray
|
||||
destArray = [0] + [sum(pair) for pair in zip([covariance*y for y in sourceArray[0:numObservations-1]], \
|
||||
[(1-covariance)*y for y in [random.normalvariate(0,1) for r in xrange(numObservations-1)]] ) ];
|
||||
[(1-covariance)*y for y in [random.normalvariate(0,1) for r in range(numObservations-1)]] ) ]
|
||||
# Uncorrelated source array:
|
||||
sourceArray2 = [random.normalvariate(0,1) for r in xrange(numObservations)];
|
||||
sourceArray2 = [random.normalvariate(0,1) for r in range(numObservations)]
|
||||
# Create a TE calculator and run it:
|
||||
teCalcClass = JPackage("infodynamics.measures.continuous.kernel").TransferEntropyCalculatorKernel
|
||||
teCalc = teCalcClass();
|
||||
teCalc.setProperty("NORMALISE", "true"); # Normalise the individual variables
|
||||
teCalc.initialise(1, 0.5); # Use history length 1 (Schreiber k=1), kernel width of 0.5 normalised units
|
||||
teCalc.setObservations(JArray(JDouble, 1)(sourceArray), JArray(JDouble, 1)(destArray));
|
||||
teCalc = teCalcClass()
|
||||
teCalc.setProperty("NORMALISE", "true") # Normalise the individual variables
|
||||
teCalc.initialise(1, 0.5) # Use history length 1 (Schreiber k=1), kernel width of 0.5 normalised units
|
||||
teCalc.setObservations(JArray(JDouble, 1)(sourceArray), JArray(JDouble, 1)(destArray))
|
||||
# For copied source, should give something close to 1 bit:
|
||||
result = teCalc.computeAverageLocalOfObservations();
|
||||
result = teCalc.computeAverageLocalOfObservations()
|
||||
print("TE result %.4f bits; expected to be close to %.4f bits for these correlated Gaussians but biased upwards" % \
|
||||
(result, math.log(1/(1-math.pow(covariance,2)))/math.log(2)));
|
||||
teCalc.initialise(); # Initialise leaving the parameters the same
|
||||
teCalc.setObservations(JArray(JDouble, 1)(sourceArray2), JArray(JDouble, 1)(destArray));
|
||||
(result, math.log(1/(1-math.pow(covariance,2)))/math.log(2)))
|
||||
teCalc.initialise() # Initialise leaving the parameters the same
|
||||
teCalc.setObservations(JArray(JDouble, 1)(sourceArray2), JArray(JDouble, 1)(destArray))
|
||||
# For random source, it should give something close to 0 bits
|
||||
result2 = teCalc.computeAverageLocalOfObservations();
|
||||
result2 = teCalc.computeAverageLocalOfObservations()
|
||||
print("TE result %.4f bits; expected to be close to 0 bits for uncorrelated Gaussians but will be biased upwards" % \
|
||||
result2);
|
||||
result2)
|
||||
|
||||
|
|
|
|||
|
|
@ -30,34 +30,34 @@ jarLocation = "../../infodynamics.jar"
|
|||
startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=" + jarLocation)
|
||||
|
||||
# Generate some random normalised data.
|
||||
numObservations = 1000;
|
||||
covariance=0.4;
|
||||
numObservations = 1000
|
||||
covariance=0.4
|
||||
# Source array of random normals:
|
||||
sourceArray = [random.normalvariate(0,1) for r in xrange(numObservations)];
|
||||
sourceArray = [random.normalvariate(0,1) for r in range(numObservations)]
|
||||
# Destination array of random normals with partial correlation to previous value of sourceArray
|
||||
destArray = [0] + [sum(pair) for pair in zip([covariance*y for y in sourceArray[0:numObservations-1]], \
|
||||
[(1-covariance)*y for y in [random.normalvariate(0,1) for r in xrange(numObservations-1)]] ) ];
|
||||
[(1-covariance)*y for y in [random.normalvariate(0,1) for r in range(numObservations-1)]] ) ]
|
||||
# Uncorrelated source array:
|
||||
sourceArray2 = [random.normalvariate(0,1) for r in xrange(numObservations)];
|
||||
sourceArray2 = [random.normalvariate(0,1) for r in range(numObservations)]
|
||||
# Create a TE calculator and run it:
|
||||
teCalcClass = JPackage("infodynamics.measures.continuous.kraskov").TransferEntropyCalculatorKraskov
|
||||
teCalc = teCalcClass();
|
||||
teCalc.setProperty("NORMALISE", "true"); # Normalise the individual variables
|
||||
teCalc.initialise(1); # Use history length 1 (Schreiber k=1)
|
||||
teCalc.setProperty("k", "4"); # Use Kraskov parameter K=4 for 4 nearest points
|
||||
teCalc = teCalcClass()
|
||||
teCalc.setProperty("NORMALISE", "true") # Normalise the individual variables
|
||||
teCalc.initialise(1) # Use history length 1 (Schreiber k=1)
|
||||
teCalc.setProperty("k", "4") # Use Kraskov parameter K=4 for 4 nearest points
|
||||
# Perform calculation with correlated source:
|
||||
teCalc.setObservations(JArray(JDouble, 1)(sourceArray), JArray(JDouble, 1)(destArray));
|
||||
result = teCalc.computeAverageLocalOfObservations();
|
||||
teCalc.setObservations(JArray(JDouble, 1)(sourceArray), JArray(JDouble, 1)(destArray))
|
||||
result = teCalc.computeAverageLocalOfObservations()
|
||||
# Note that the calculation is a random variable (because the generated
|
||||
# data is a set of random variables) - the result will be of the order
|
||||
# of what we expect, but not exactly equal to it; in fact, there will
|
||||
# be a large variance around it.
|
||||
print("TE result %.4f nats; expected to be close to %.4f nats for these correlated Gaussians" % \
|
||||
(result, math.log(1/(1-math.pow(covariance,2)))));
|
||||
(result, math.log(1/(1-math.pow(covariance,2)))))
|
||||
# Perform calculation with uncorrelated source:
|
||||
teCalc.initialise(); # Initialise leaving the parameters the same
|
||||
teCalc.setObservations(JArray(JDouble, 1)(sourceArray2), JArray(JDouble, 1)(destArray));
|
||||
result2 = teCalc.computeAverageLocalOfObservations();
|
||||
print("TE result %.4f nats; expected to be close to 0 nats for these uncorrelated Gaussians" % result2);
|
||||
teCalc.initialise() # Initialise leaving the parameters the same
|
||||
teCalc.setObservations(JArray(JDouble, 1)(sourceArray2), JArray(JDouble, 1)(destArray))
|
||||
result2 = teCalc.computeAverageLocalOfObservations()
|
||||
print("TE result %.4f nats; expected to be close to 0 nats for these uncorrelated Gaussians" % result2)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@ startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=" + jarLocation)
|
|||
|
||||
# Generate some random binary data.
|
||||
numObservations = 100
|
||||
sourceArray = [[random.randint(0,1) for y in xrange(2)] for x in xrange(numObservations)] # for 10 rows (time-steps) for 2 variables
|
||||
sourceArray2= [[random.randint(0,1) for y in xrange(2)] for x in xrange(numObservations)] # for 10 rows (time-steps) for 2 variables
|
||||
sourceArray = [[random.randint(0,1) for y in range(2)] for x in range(numObservations)] # for 10 rows (time-steps) for 2 variables
|
||||
sourceArray2= [[random.randint(0,1) for y in range(2)] for x in range(numObservations)] # for 10 rows (time-steps) for 2 variables
|
||||
# Destination variable takes a copy of the first bit of the source in bit 1,
|
||||
# and an XOR of the two bits of the source in bit 2:
|
||||
destArray = [[0, 0]]
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@ startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=" + jarLocation)
|
|||
datafile = '../data/4ColsPairedNoisyDependence-1.txt'
|
||||
# List of column numbers for univariate time seres 1 and 2:
|
||||
# (you can select any columns you wish to be contained in each variable)
|
||||
univariateSeries1Column = 0; # array indices start from 0 in python
|
||||
univariateSeries2Column = 2;
|
||||
univariateSeries1Column = 0 # array indices start from 0 in python
|
||||
univariateSeries2Column = 2
|
||||
# List of column numbers for joint variables 1 and 2:
|
||||
# (you can select any columns you wish to be contained in each variable)
|
||||
jointVariable1Columns = [0,1] # array indices start from 0 in python
|
||||
|
|
@ -53,7 +53,7 @@ jointVariable2Columns = [2,3]
|
|||
# infodynamics.measures.continuous.MutualInfoCalculatorMultiVariate
|
||||
# which we wish to use for the calculation.
|
||||
# Note that one could use any of the following calculators (try them all!):
|
||||
# implementingClass = "infodynamics.measures.continuous.kraskov.MutualInfoCalculatorMultiVariateKraskov1" # MI(1;3) as 0.10044, MI([1,2], [3,4]) = 0.36353 (NATS not bits)
|
||||
# implementingClass = "infodynamics.measures.continuous.kraskov.MutualInfoCalculatorMultiVariateKraskov1" # MI(0;2) as 0.10044, MI([0,1]; [2,3]) = 0.36353 (NATS not bits)
|
||||
# implementingClass = "infodynamics.measures.continuous.kernel.MutualInfoCalculatorMultiVariateKernel"
|
||||
# implementingClass = "infodynamics.measures.continuous.gaussian.MutualInfoCalculatorMultiVariateGaussian"
|
||||
implementingClass = "infodynamics.measures.continuous.kraskov.MutualInfoCalculatorMultiVariateKraskov1"
|
||||
|
|
@ -64,8 +64,8 @@ data = readFloatsFile.readFloatsFile(datafile)
|
|||
# As numpy array:
|
||||
A = numpy.array(data)
|
||||
# Pull out the columns from the data set for a univariate MI calculation:
|
||||
univariateSeries1 = A[:,univariateSeries1Column];
|
||||
univariateSeries2 = A[:,univariateSeries2Column];
|
||||
univariateSeries1 = A[:,univariateSeries1Column]
|
||||
univariateSeries2 = A[:,univariateSeries2Column]
|
||||
# Pull out the columns from the data set for a multivariate MI calculation:
|
||||
jointVariable1 = A[:,jointVariable1Columns]
|
||||
jointVariable2 = A[:,jointVariable2Columns]
|
||||
|
|
|
|||
|
|
@ -24,10 +24,10 @@ def readFloatsFile(filename):
|
|||
for line in f: # read all lines
|
||||
if (line.startswith("%") or line.startswith("#")):
|
||||
# Assume this is a comment line
|
||||
continue;
|
||||
continue
|
||||
if (len(line.split()) == 0):
|
||||
# Line is empty
|
||||
continue;
|
||||
continue
|
||||
array.append([float(x) for x in line.split()])
|
||||
return array
|
||||
|
||||
|
|
|
|||
|
|
@ -24,10 +24,10 @@ def readIntsFile(filename):
|
|||
for line in f: # read all lines
|
||||
if (line.startswith("%") or line.startswith("#")):
|
||||
# Assume this is a comment line
|
||||
continue;
|
||||
continue
|
||||
if (len(line.split()) == 0):
|
||||
# Line is empty
|
||||
continue;
|
||||
continue
|
||||
array.append([int(x) for x in line.split()])
|
||||
return array
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue