*online-stats* — Online algorithm for mean, variance, and covariance
====================================================================
The *online-stats* Python package contains a single function
`online_stats.add_sample()` which updates a sample mean given a new sample, as
well as optionally the sample variance and the sample covariance matrix.
The package has no dependencies, as the `online_stats.add_sample()` function
works with any input data type that supports in-place addition and fancy
slicing.
Usage
-----
```py
>>> import numpy as np
>>>
>>> # the package
>>> import online_stats
>>>
>>> # online algorithm for the mean
>>> # start from zero
>>> mu = np.zeros(4)
>>>
>>> # generate samples and compute their mean
>>> for i in range(1000):
... x = np.random.normal([0.1, 0.3, 0.5, 0.7])
... online_stats.add_sample(i, x, mu)
...
>>> # the mean is computed in place
>>> print(mu)
[0.08804402 0.25896929 0.44891264 0.73418769]
>>>
>>> # compute the variance
>>> mu = np.zeros(4)
>>> var = np.zeros(4)
>>> for i in range(1000):
... x = np.random.normal([0.1, 0.3, 0.5, 0.7], [0.2, 0.4, 0.6, 0.8])
... online_stats.add_sample(i, x, mu, var=var)
...
>>> print(mu)
[0.09854301 0.29509305 0.4777673 0.70008311]
>>> print(var**0.5)
[0.19900518 0.4012857 0.59267129 0.81856542]
>>>
>>> # compute the covariance matrix
>>> mu = np.zeros(4)
>>> cov = np.zeros((4, 4))
>>> for i in range(100_000):
... x = np.random.multivariate_normal([0.1, 0.3, 0.5, 0.7],
... [[0.2, 0.02, 0.04, 0.06],
... [0.02, 0.4, 0.06, 0.08],
... [0.04, 0.06, 0.6, 0.10],
... [0.06, 0.08, 0.10, 0.8]])
... online_stats.add_sample(i, x, mu, cov=cov)
...
>>> print(mu)
[0.10095607 0.30486108 0.50113141 0.69912377]
>>> print(cov)
[[0.20101406 0.02105503 0.0382198 0.06220174]
[0.02105503 0.39909545 0.06192678 0.0791239 ]
[0.0382198 0.06192678 0.59960537 0.1082596 ]
[0.06220174 0.0791239 0.1082596 0.80071002]]
```
Raw data
{
"_id": null,
"home_page": "",
"name": "online-stats",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "online algorithm,online mean,online variance,online covariance,online statistics",
"author": "",
"author_email": "Nicolas Tessore <n.tessore@ucl.ac.uk>",
"download_url": "https://files.pythonhosted.org/packages/70/ee/6f3c3095a1712b8cc31ce64404c22302049fe6b13c3d6ccfa32724125d00/online_stats-2023.6.tar.gz",
"platform": null,
"description": "*online-stats* \u2014 Online algorithm for mean, variance, and covariance\n====================================================================\n\nThe *online-stats* Python package contains a single function\n`online_stats.add_sample()` which updates a sample mean given a new sample, as\nwell as optionally the sample variance and the sample covariance matrix.\n\nThe package has no dependencies, as the `online_stats.add_sample()` function\nworks with any input data type that supports in-place addition and fancy\nslicing.\n\nUsage\n-----\n\n```py\n>>> import numpy as np\n>>>\n>>> # the package\n>>> import online_stats\n>>>\n>>> # online algorithm for the mean\n>>> # start from zero\n>>> mu = np.zeros(4)\n>>>\n>>> # generate samples and compute their mean\n>>> for i in range(1000):\n... x = np.random.normal([0.1, 0.3, 0.5, 0.7])\n... online_stats.add_sample(i, x, mu)\n...\n>>> # the mean is computed in place\n>>> print(mu)\n[0.08804402 0.25896929 0.44891264 0.73418769]\n>>>\n>>> # compute the variance\n>>> mu = np.zeros(4)\n>>> var = np.zeros(4)\n>>> for i in range(1000):\n... x = np.random.normal([0.1, 0.3, 0.5, 0.7], [0.2, 0.4, 0.6, 0.8])\n... online_stats.add_sample(i, x, mu, var=var)\n...\n>>> print(mu)\n[0.09854301 0.29509305 0.4777673 0.70008311]\n>>> print(var**0.5)\n[0.19900518 0.4012857 0.59267129 0.81856542]\n>>>\n>>> # compute the covariance matrix\n>>> mu = np.zeros(4)\n>>> cov = np.zeros((4, 4))\n>>> for i in range(100_000):\n... x = np.random.multivariate_normal([0.1, 0.3, 0.5, 0.7],\n... [[0.2, 0.02, 0.04, 0.06],\n... [0.02, 0.4, 0.06, 0.08],\n... [0.04, 0.06, 0.6, 0.10],\n... [0.06, 0.08, 0.10, 0.8]])\n... online_stats.add_sample(i, x, mu, cov=cov)\n...\n>>> print(mu)\n[0.10095607 0.30486108 0.50113141 0.69912377]\n>>> print(cov)\n[[0.20101406 0.02105503 0.0382198 0.06220174]\n [0.02105503 0.39909545 0.06192678 0.0791239 ]\n [0.0382198 0.06192678 0.59960537 0.1082596 ]\n [0.06220174 0.0791239 0.1082596 0.80071002]]\n\n```\n\n",
"bugtrack_url": null,
"license": "",
"summary": "Online algorithm for mean, variance, and covariance.",
"version": "2023.6",
"project_urls": {
"Home": "https://github.com/ntessore/online-stats",
"Issues": "https://github.com/ntessore/online-stats/issues"
},
"split_keywords": [
"online algorithm",
"online mean",
"online variance",
"online covariance",
"online statistics"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7b8d44f8ee8aaf48d052674fd4e96407bd453550be8c71808f1d8251ea33b8ee",
"md5": "a1b607d41f83f5ca69b514145eb8a129",
"sha256": "5cf15b049fd6d1c2c93dd7ec31501c06922d93f7b16914a0c61ff6cf9068593a"
},
"downloads": -1,
"filename": "online_stats-2023.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a1b607d41f83f5ca69b514145eb8a129",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 2968,
"upload_time": "2023-06-13T08:39:28",
"upload_time_iso_8601": "2023-06-13T08:39:28.877694Z",
"url": "https://files.pythonhosted.org/packages/7b/8d/44f8ee8aaf48d052674fd4e96407bd453550be8c71808f1d8251ea33b8ee/online_stats-2023.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "70ee6f3c3095a1712b8cc31ce64404c22302049fe6b13c3d6ccfa32724125d00",
"md5": "bdccb91c6f0d175af8769975585657e1",
"sha256": "fe824878afc4f20a05895142e1c3e5169b0962f607b9a7891a3747077cae46fe"
},
"downloads": -1,
"filename": "online_stats-2023.6.tar.gz",
"has_sig": false,
"md5_digest": "bdccb91c6f0d175af8769975585657e1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 2438,
"upload_time": "2023-06-13T08:39:29",
"upload_time_iso_8601": "2023-06-13T08:39:29.915533Z",
"url": "https://files.pythonhosted.org/packages/70/ee/6f3c3095a1712b8cc31ce64404c22302049fe6b13c3d6ccfa32724125d00/online_stats-2023.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-13 08:39:29",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ntessore",
"github_project": "online-stats",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "online-stats"
}