{"library":"nfoursid","title":"NFoursID","description":"NFoursID is a Python library that implements the N4SID algorithm for subspace identification, along with Kalman filtering and state-space models. State-space models are versatile tools for representing multi-dimensional time series, encompassing models like ARMAX. The current version is 1.0.2. The project appears active, with its latest release (1.0.2) showing an unusual future publication date of July 24, 2025, on PyPI.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install nfoursid"],"cli":null},"imports":["from nfoursid.nfoursid import NFourSID","from nfoursid.kalman import Kalman","from nfoursid.state_space import StateSpace"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import numpy as np\nimport pandas as pd\nfrom nfoursid.nfoursid import NFourSID\nfrom nfoursid.state_space import StateSpace\nfrom nfoursid.kalman import Kalman\n\n# 1. Define a state-space model (example parameters)\nA = np.array([[0.9, 0.1], [0, 0.9]])\nB = np.array([[1], [0]])\nC = np.array([[0.5, 0.5]])\nD = np.array([[0]])\n\nstate_space_true = StateSpace(A, B, C, D)\n\n# 2. Simulate some data\nnum_datapoints = 100\ninputs = np.random.randn(num_datapoints, 1) * 0.1 # Small random inputs\noutputs = []\n\nfor i in range(num_datapoints):\n    output_step = state_space_true.step(inputs[i].reshape(-1, 1), noise=np.random.randn(1, 1) * 0.05)\n    outputs.append(output_step.flatten())\n\ndata = pd.DataFrame({\n    'input_0': inputs.flatten(),\n    'output_0': np.array(outputs).flatten()\n})\n\n# 3. Perform N4SID identification\noutput_columns = ['output_0']\ninput_columns = ['input_0']\nnum_block_rows = 2 # See warnings regarding this parameter\n\nnfoursid_estimator = NFourSID(\n    dataframe=data,\n    output_columns=output_columns,\n    input_columns=input_columns,\n    num_block_rows=num_block_rows\n)\n\nnfoursid_estimator.subspace_identification() # Essential before system_identification for proper order detection\n\n# Determine system order (e.g., from eigenvalue plot, assume 2 for this example)\nrank = 2\n\nstate_space_identified, covariance_matrix = nfoursid_estimator.system_identification(rank=rank)\n\nprint(\"Identified State-Space A matrix:\\n\", state_space_identified.a)\nprint(\"Identified State-Space C matrix:\\n\", state_space_identified.c)\n\n# 4. Use a Kalman filter for prediction/estimation\nkalman_filter = Kalman(state_space_identified, covariance_matrix)\n\n# Simulate a few steps with the Kalman filter\nfiltered_outputs = []\nfor i in range(num_datapoints):\n    kalman_filter.step(data[output_columns].iloc[i].values.reshape(-1,1),\n                       data[input_columns].iloc[i].values.reshape(-1,1))\n    filtered_outputs.append(kalman_filter.to_dataframe()['output_0']['filtered'].iloc[-1])\n\nprint(\"First 5 actual outputs:\", data['output_0'].head().tolist())\nprint(\"First 5 filtered outputs:\", filtered_outputs[:5])","lang":"python","description":"This quickstart demonstrates the core workflow of `nfoursid`: defining a true state-space model, simulating data, using the `NFourSID` class for system identification to recover a model from data, and then applying a `Kalman` filter for state estimation.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"1.0.2","pypi_latest":"1.0.2","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":11.2,"avg_import_s":2.94,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.82,"mem_mb":46.5,"disk_size":"252.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":11.1,"import_time_s":2.06,"mem_mb":46.5,"disk_size":"241M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":3.81,"mem_mb":52.9,"disk_size":"272.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.2,"import_time_s":3.48,"mem_mb":53,"disk_size":"260M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":3.09,"mem_mb":51.6,"disk_size":"256.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.3,"import_time_s":3.44,"mem_mb":51.6,"disk_size":"243M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.76,"mem_mb":52.5,"disk_size":"255.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":11,"import_time_s":2.97,"mem_mb":52.5,"disk_size":"242M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":2.65,"mem_mb":46.5,"disk_size":"256.0M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"nfoursid","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":13.4,"import_time_s":2.29,"mem_mb":46.5,"disk_size":"247M"}]}}