PermutationEntropy

Permutation entropy: disorder in the ORDER of neighbouring samples.

PermutationEntropy py
data
entropy
Type name
signal:PermutationEntropy
Plane
signal
Tags
analysis
Language
python
Tier
in-process
Bundle
complexity
Source
node-bundles/complexity/permutation_entropy.py
Availability
available

Slots

SlotDirectionType
datainputARRAY
entropyoutputARRAY

Parameters

permutation

NameTypeDefaultRangeDoc
orderint32 … 7How many samples make one ordering pattern.
delayint11 … 100Samples between the members of a pattern; raise it for a slower rhythm.
normalizebooltrueScale to 0..1 against the most disordered signal.

common

NameTypeDefaultRangeDoc
autotriggerboolfalseRun on the node's own schedule, instead of waiting for an input frame. Turn this on for sources; leave it off for transforms driven by their input.
max_frequencyfloat00 … 100Rate cap for this node, read through `frequency_mode`. 0 means uncapped — the node runs as often as the scheduler and its inputs allow.
frequency_modestringupdates_per_secondupdates_per_second | seconds_per_updateHow to read `max_frequency`: as a rate in Hz (updates per second), or as a period in seconds between updates — convenient for very slow nodes.

Source

The current source of this node, as it stands in the goofi repository at node-bundles/complexity/permutation_entropy.py.

node-bundles/complexity/permutation_entropy.py
"""PermutationEntropy — how disordered a signal's ORDER is, from antropy.

Reads only the ranking of neighbouring samples, so amplitude scaling and slow drift do not move
it. The last axis is time and is consumed; every axis before it survives.
"""

import antropy
import numpy as np
import goofi


class PermutationEntropy(goofi.Node):
    """Permutation entropy: disorder in the ORDER of neighbouring samples."""

    TAGS = ["analysis"]
    INPUTS = {"data": goofi.InputSlot(goofi.DataType.ARRAY, required=True)}
    OUTPUTS = {"entropy": goofi.DataType.ARRAY}
    PARAMS = {
        "permutation": {
            "order": goofi.IntParam(3, 2, 7, doc="How many samples make one ordering pattern."),
            "delay": goofi.IntParam(
                1, 1, 100, doc="Samples between the members of a pattern; raise it for a slower rhythm."
            ),
            "normalize": goofi.BoolParam(True, doc="Scale to 0..1 against the most disordered signal."),
        }
    }

    def process(self, data):
        p = self.params.permutation
        return np.apply_along_axis(
            antropy.perm_entropy,
            -1,
            np.asarray(data.data, dtype=np.float64),
            order=p.order,
            delay=p.delay,
            normalize=p.normalize,
        ).astype(np.float32)

← All nodes

This reference describes goofi 3.1.0(537cd394), generated from a running instance on 2026-09-06.