colour.MultiSpectralDistributions#
- class colour.MultiSpectralDistributions(data: ArrayLike | DataFrame | dict | MultiSignals | Sequence | Series | Signal | SpectralDistribution | None = None, domain: ArrayLike | SpectralShape | None = None, labels: Sequence | None = None, **kwargs: Any)[source]#
Bases:
MultiSignals
Define the multi-spectral distributions: the base object for multi spectral computations. It is used to model colour matching functions, display primaries, camera sensitivities, etc…
The multi-spectral distributions will be initialised according to CIE 15:2004 recommendation: the method developed by Sprague (1880) will be used for interpolating functions having a uniformly spaced independent variable and the Cubic Spline method for non-uniformly spaced independent variable. Extrapolation is performed according to CIE 167:2005 recommendation.
Important
Specific documentation about getting, setting, indexing and slicing the multi-spectral power distributions values is available in the Spectral Representation and Continuous Signal section.
- Parameters:
data (ArrayLike | DataFrame | dict | MultiSignals | Sequence | Series | Signal | SpectralDistribution | None) – Data to be stored in the multi-spectral distributions.
domain (ArrayLike | SpectralShape | None) – Values to initialise the multiple
colour.SpectralDistribution
class instancescolour.continuous.Signal.wavelengths
attribute with. If bothdata
anddomain
arguments are defined, the latter will be used to initialise thecolour.continuous.Signal.wavelengths
property.labels (Sequence | None) – Names to use for the
colour.SpectralDistribution
class instances.extrapolator – Extrapolator class type to use as extrapolating function for the
colour.SpectralDistribution
class instances.extrapolator_kwargs – Arguments to use when instantiating the extrapolating function of the
colour.SpectralDistribution
class instances.interpolator – Interpolator class type to use as interpolating function for the
colour.SpectralDistribution
class instances.interpolator_kwargs – Arguments to use when instantiating the interpolating function of the
colour.SpectralDistribution
class instances.name – Multi-spectral distributions name.
display_labels – Multi-spectral distributions labels for figures, default to
colour.MultiSpectralDistributions.labels
property value.kwargs (Any)
Warning
The Cubic Spline method might produce unexpected results with exceptionally noisy or non-uniformly spaced data.
Attributes
Methods
References
[CIET13805a], [CIET13805d], [CIET14804c]
Examples
Instantiating the multi-spectral distributions with a uniformly spaced independent variable:
>>> from colour.utilities import numpy_print_options >>> data = { ... 500: (0.004900, 0.323000, 0.272000), ... 510: (0.009300, 0.503000, 0.158200), ... 520: (0.063270, 0.710000, 0.078250), ... 530: (0.165500, 0.862000, 0.042160), ... 540: (0.290400, 0.954000, 0.020300), ... 550: (0.433450, 0.994950, 0.008750), ... 560: (0.594500, 0.995000, 0.003900), ... } >>> labels = ("x_bar", "y_bar", "z_bar") >>> with numpy_print_options(suppress=True): ... MultiSpectralDistributions(data, labels=labels) ... ... MultiSpectral...([[ 500. , 0.0049 , 0.323 , 0.272 ], ... [ 510. , 0.0093 , 0.503 , 0.1582 ], ... [ 520. , 0.06327, 0.71 , 0.07825], ... [ 530. , 0.1655 , 0.862 , 0.04216], ... [ 540. , 0.2904 , 0.954 , 0.0203 ], ... [ 550. , 0.43345, 0.99495, 0.00875], ... [ 560. , 0.5945 , 0.995 , 0.0039 ]], ... [...'x_bar', ...'y_bar', ...'z_bar'], ... SpragueInterpolator, ... {}, ... Extrapolator, ... {'method': 'Constant', 'left': None, 'right': None})
Instantiating a spectral distribution with a non-uniformly spaced independent variable:
>>> data[511] = (0.00314, 0.31416, 0.03142) >>> with numpy_print_options(suppress=True): ... MultiSpectralDistributions(data, labels=labels) ... ... MultiSpectral...([[ 500. , 0.0049 , 0.323 , 0.272 ], ... [ 510. , 0.0093 , 0.503 , 0.1582 ], ... [ 511. , 0.00314, 0.31416, 0.03142], ... [ 520. , 0.06327, 0.71 , 0.07825], ... [ 530. , 0.1655 , 0.862 , 0.04216], ... [ 540. , 0.2904 , 0.954 , 0.0203 ], ... [ 550. , 0.43345, 0.99495, 0.00875], ... [ 560. , 0.5945 , 0.995 , 0.0039 ]], ... [...'x_bar', ...'y_bar', ...'z_bar'], ... CubicSplineInterpolator, ... {}, ... Extrapolator, ... {'method': 'Constant', 'left': None, 'right': None})
Instantiation with a Pandas DataFrame:
>>> from colour.utilities import is_pandas_installed >>> if is_pandas_installed(): ... from pandas import DataFrame ... ... x_bar = [data[key][0] for key in sorted(data.keys())] ... y_bar = [data[key][1] for key in sorted(data.keys())] ... z_bar = [data[key][2] for key in sorted(data.keys())] ... print( ... MultiSignals( ... DataFrame( ... dict(zip(labels, [x_bar, y_bar, z_bar])), data.keys() ... ) ... ) ... ) ... [[ 5.0000000...e+02 4.9000000...e-03 3.2300000...e-01 2.7200000...e-01] [ 5.1000000...e+02 9.3000000...e-03 5.0300000...e-01 1.5820000...e-01] [ 5.2000000...e+02 3.1400000...e-03 3.1416000...e-01 3.1420000...e-02] [ 5.3000000...e+02 6.3270000...e-02 7.1000000...e-01 7.8250000...e-02] [ 5.4000000...e+02 1.6550000...e-01 8.6200000...e-01 4.2160000...e-02] [ 5.5000000...e+02 2.9040000...e-01 9.5400000...e-01 2.0300000...e-02] [ 5.6000000...e+02 4.3345000...e-01 9.9495000...e-01 8.7500000...e-03] [ 5.1100000...e+02 5.9450000...e-01 9.9500000...e-01 3.9000000...e-03]]
- __init__(data: ArrayLike | DataFrame | dict | MultiSignals | Sequence | Series | Signal | SpectralDistribution | None = None, domain: ArrayLike | SpectralShape | None = None, labels: Sequence | None = None, **kwargs: Any) None [source]#
- Parameters:
data (ArrayLike | DataFrame | dict | MultiSignals | Sequence | Series | Signal | SpectralDistribution | None)
domain (ArrayLike | SpectralShape | None)
labels (Sequence | None)
kwargs (Any)
- Return type:
None
- property display_name: str#
Getter and setter property for the multi-spectral distributions display name.
- Parameters:
value – Value to set the multi-spectral distributions display name with.
- Returns:
Multi-spectral distributions display name.
- Return type:
- property display_labels: List[str]#
Getter and setter property for the multi-spectral distributions display labels.
- Parameters:
value – Value to set the multi-spectral distributions display labels with.
- Returns:
Multi-spectral distributions display labels.
- Return type:
- property wavelengths: NDArrayFloat#
Getter and setter property for the multi-spectral distributions wavelengths \(\lambda_n\).
- Parameters:
value – Value to set the multi-spectral distributions wavelengths \(\lambda_n\) with.
- Returns:
Multi-spectral distributions wavelengths \(\lambda_n\).
- Return type:
- property values: NDArrayFloat#
Getter and setter property for the multi-spectral distributions values.
- Parameters:
value – Value to set the multi-spectral distributions wavelengths values with.
- Returns:
Multi-spectral distributions values.
- Return type:
- property shape: SpectralShape#
Getter property for the multi-spectral distributions shape.
- Returns:
Multi-spectral distributions shape.
- Return type:
Notes
Multi-spectral distributions with a non-uniformly spaced independent variable have multiple intervals, in that case
colour.MultiSpectralDistributions.shape
property returns the minimum interval size.
Examples
Shape of the multi-spectral distributions with a uniformly spaced independent variable:
>>> from colour.utilities import numpy_print_options >>> data = { ... 500: (0.004900, 0.323000, 0.272000), ... 510: (0.009300, 0.503000, 0.158200), ... 520: (0.063270, 0.710000, 0.078250), ... 530: (0.165500, 0.862000, 0.042160), ... 540: (0.290400, 0.954000, 0.020300), ... 550: (0.433450, 0.994950, 0.008750), ... 560: (0.594500, 0.995000, 0.003900), ... } >>> MultiSpectralDistributions(data).shape SpectralShape(500.0, 560.0, 10.0)
Shape of the multi-spectral distributions with a non-uniformly spaced independent variable:
>>> data[511] = (0.00314, 0.31416, 0.03142) >>> MultiSpectralDistributions(data).shape SpectralShape(500.0, 560.0, 1.0)
- interpolate(shape: SpectralShape, interpolator: Type[ProtocolInterpolator] | None = None, interpolator_kwargs: dict | None = None) Self [source]#
Interpolate the multi-spectral distributions in-place according to CIE 167:2005 recommendation (if the interpolator has not been changed at instantiation time) or given interpolation arguments.
The logic for choosing the interpolator class when
interpolator
is not given is as follows:if self.interpolator not in ( SpragueInterpolator, CubicSplineInterpolator, ): interpolator = self.interpolator elif self.is_uniform(): interpolator = SpragueInterpolator else: interpolator = CubicSplineInterpolator
The logic for choosing the interpolator keyword arguments when
interpolator_kwargs
is not given is as follows:if self.interpolator not in ( SpragueInterpolator, CubicSplineInterpolator, ): interpolator_kwargs = self.interpolator_kwargs else: interpolator_kwargs = {}
- Parameters:
shape (SpectralShape) – Spectral shape used for interpolation.
interpolator (Type[ProtocolInterpolator] | None) – Interpolator class type to use as interpolating function.
interpolator_kwargs (dict | None) – Arguments to use when instantiating the interpolating function.
- Returns:
Interpolated multi-spectral distributions.
- Return type:
Notes
See
colour.SpectralDistribution.interpolate()
method notes section.
Warning
See
colour.SpectralDistribution.interpolate()
method warning section.References
Examples
Multi-spectral distributions with a uniformly spaced independent variable uses Sprague (1880) interpolation:
>>> from colour.utilities import numpy_print_options >>> data = { ... 500: (0.004900, 0.323000, 0.272000), ... 510: (0.009300, 0.503000, 0.158200), ... 520: (0.063270, 0.710000, 0.078250), ... 530: (0.165500, 0.862000, 0.042160), ... 540: (0.290400, 0.954000, 0.020300), ... 550: (0.433450, 0.994950, 0.008750), ... 560: (0.594500, 0.995000, 0.003900), ... } >>> msds = MultiSpectralDistributions(data) >>> with numpy_print_options(suppress=True): ... print(msds.interpolate(SpectralShape(500, 560, 1))) ... [[ 500. 0.0049 ... 0.323 ... 0.272 ...] [ 501. 0.0043252... 0.3400642... 0.2599848...] [ 502. 0.0037950... 0.3572165... 0.2479849...] [ 503. 0.0033761... 0.3744030... 0.2360688...] [ 504. 0.0031397... 0.3916650... 0.2242878...] [ 505. 0.0031582... 0.4091067... 0.2126801...] [ 506. 0.0035019... 0.4268629... 0.2012748...] [ 507. 0.0042365... 0.4450668... 0.1900968...] [ 508. 0.0054192... 0.4638181... 0.1791709...] [ 509. 0.0070965... 0.4831505... 0.1685260...] [ 510. 0.0093 ... 0.503 ... 0.1582 ...] [ 511. 0.0120562... 0.5232543... 0.1482365...] [ 512. 0.0154137... 0.5439717... 0.1386625...] [ 513. 0.0193991... 0.565139 ... 0.1294993...] [ 514. 0.0240112... 0.5866255... 0.1207676...] [ 515. 0.0292289... 0.6082226... 0.1124864...] [ 516. 0.0350192... 0.6296821... 0.1046717...] [ 517. 0.0413448... 0.6507558... 0.0973361...] [ 518. 0.0481727... 0.6712346... 0.0904871...] [ 519. 0.0554816... 0.6909873... 0.0841267...] [ 520. 0.06327 ... 0.71 ... 0.07825 ...] [ 521. 0.0715642... 0.7283456... 0.0728614...] [ 522. 0.0803970... 0.7459679... 0.0680051...] [ 523. 0.0897629... 0.7628184... 0.0636823...] [ 524. 0.0996227... 0.7789004... 0.0598449...] [ 525. 0.1099142... 0.7942533... 0.0564111...] [ 526. 0.1205637... 0.8089368... 0.0532822...] [ 527. 0.1314973... 0.8230153... 0.0503588...] [ 528. 0.1426523... 0.8365417... 0.0475571...] [ 529. 0.1539887... 0.8495422... 0.0448253...] [ 530. 0.1655 ... 0.862 ... 0.04216 ...] [ 531. 0.1772055... 0.8738585... 0.0395936...] [ 532. 0.1890877... 0.8850940... 0.0371046...] [ 533. 0.2011304... 0.8957073... 0.0346733...] [ 534. 0.2133310... 0.9057092... 0.0323006...] [ 535. 0.2256968... 0.9151181... 0.0300011...] [ 536. 0.2382403... 0.9239560... 0.0277974...] [ 537. 0.2509754... 0.9322459... 0.0257131...] [ 538. 0.2639130... 0.9400080... 0.0237668...] [ 539. 0.2770569... 0.9472574... 0.0219659...] [ 540. 0.2904 ... 0.954 ... 0.0203 ...] [ 541. 0.3039194... 0.9602409... 0.0187414...] [ 542. 0.3175893... 0.9660106... 0.0172748...] [ 543. 0.3314022... 0.9713260... 0.0158947...] [ 544. 0.3453666... 0.9761850... 0.0146001...] [ 545. 0.3595019... 0.9805731... 0.0133933...] [ 546. 0.3738324... 0.9844703... 0.0122777...] [ 547. 0.3883818... 0.9878583... 0.0112562...] [ 548. 0.4031674... 0.9907270... 0.0103302...] [ 549. 0.4181943... 0.9930817... 0.0094972...] [ 550. 0.43345 ... 0.99495 ... 0.00875 ...] [ 551. 0.4489082... 0.9963738... 0.0080748...] [ 552. 0.4645599... 0.9973682... 0.0074580...] [ 553. 0.4803950... 0.9979568... 0.0068902...] [ 554. 0.4963962... 0.9981802... 0.0063660...] [ 555. 0.5125410... 0.9980910... 0.0058818...] [ 556. 0.5288034... 0.9977488... 0.0054349...] [ 557. 0.5451560... 0.9972150... 0.0050216...] [ 558. 0.5615719... 0.9965479... 0.0046357...] [ 559. 0.5780267... 0.9957974... 0.0042671...] [ 560. 0.5945 ... 0.995 ... 0.0039 ...]]
Multi-spectral distributions with a non-uniformly spaced independent variable uses Cubic Spline interpolation:
>>> data[511] = (0.00314, 0.31416, 0.03142) >>> msds = MultiSpectralDistributions(data) >>> with numpy_print_options(suppress=True): ... print(msds.interpolate(SpectralShape(500, 560, 1))) ... [[ 500. 0.0049 ... 0.323 ... 0.272 ...] [ 501. 0.0300110... 0.9455153... 0.5985102...] [ 502. 0.0462136... 1.3563103... 0.8066498...] [ 503. 0.0547925... 1.5844039... 0.9126502...] [ 504. 0.0570325... 1.6588148... 0.9327429...] [ 505. 0.0542183... 1.6085619... 0.8831594...] [ 506. 0.0476346... 1.4626640... 0.7801312...] [ 507. 0.0385662... 1.2501401... 0.6398896...] [ 508. 0.0282978... 1.0000089... 0.4786663...] [ 509. 0.0181142... 0.7412892... 0.3126925...] [ 510. 0.0093 ... 0.503 ... 0.1582 ...] [ 511. 0.00314 ... 0.31416 ... 0.03142 ...] [ 512. 0.0006228... 0.1970419... -0.0551709...] [ 513. 0.0015528... 0.1469341... -0.1041165...] [ 514. 0.0054381... 0.1523785... -0.1217152...] [ 515. 0.0117869... 0.2019173... -0.1142659...] [ 516. 0.0201073... 0.2840925... -0.0880670...] [ 517. 0.0299077... 0.3874463... -0.0494174...] [ 518. 0.0406961... 0.5005208... -0.0046156...] [ 519. 0.0519808... 0.6118579... 0.0400397...] [ 520. 0.06327 ... 0.71 ... 0.07825 ...] [ 521. 0.0741690... 0.7859059... 0.1050384...] [ 522. 0.0846726... 0.8402033... 0.1207164...] [ 523. 0.0948728... 0.8759363... 0.1269173...] [ 524. 0.1048614... 0.8961496... 0.1252743...] [ 525. 0.1147305... 0.9038874... 0.1174207...] [ 526. 0.1245719... 0.9021942... 0.1049899...] [ 527. 0.1344776... 0.8941145... 0.0896151...] [ 528. 0.1445395... 0.8826926... 0.0729296...] [ 529. 0.1548497... 0.8709729... 0.0565668...] [ 530. 0.1655 ... 0.862 ... 0.04216 ...] [ 531. 0.1765618... 0.858179 ... 0.0309976...] [ 532. 0.1880244... 0.8593588... 0.0229897...] [ 533. 0.1998566... 0.8647493... 0.0177013...] [ 534. 0.2120269... 0.8735601... 0.0146975...] [ 535. 0.2245042... 0.8850011... 0.0135435...] [ 536. 0.2372572... 0.8982820... 0.0138044...] [ 537. 0.2502546... 0.9126126... 0.0150454...] [ 538. 0.2634650... 0.9272026... 0.0168315...] [ 539. 0.2768572... 0.9412618... 0.0187280...] [ 540. 0.2904 ... 0.954 ... 0.0203 ...] [ 541. 0.3040682... 0.9647869... 0.0211987...] [ 542. 0.3178617... 0.9736329... 0.0214207...] [ 543. 0.3317865... 0.9807080... 0.0210486...] [ 544. 0.3458489... 0.9861825... 0.0201650...] [ 545. 0.3600548... 0.9902267... 0.0188525...] [ 546. 0.3744103... 0.9930107... 0.0171939...] [ 547. 0.3889215... 0.9947048... 0.0152716...] [ 548. 0.4035944... 0.9954792... 0.0131685...] [ 549. 0.4184352... 0.9955042... 0.0109670...] [ 550. 0.43345 ... 0.99495 ... 0.00875 ...] [ 551. 0.4486447... 0.9939867... 0.0065999...] [ 552. 0.4640255... 0.9927847... 0.0045994...] [ 553. 0.4795984... 0.9915141... 0.0028313...] [ 554. 0.4953696... 0.9903452... 0.0013781...] [ 555. 0.5113451... 0.9894483... 0.0003224...] [ 556. 0.5275310... 0.9889934... -0.0002530...] [ 557. 0.5439334... 0.9891509... -0.0002656...] [ 558. 0.5605583... 0.9900910... 0.0003672...] [ 559. 0.5774118... 0.9919840... 0.0017282...] [ 560. 0.5945 ... 0.995 ... 0.0039 ...]]
- extrapolate(shape: SpectralShape, extrapolator: Type[ProtocolExtrapolator] | None = None, extrapolator_kwargs: dict | None = None) Self [source]#
Extrapolate the multi-spectral distributions in-place according to CIE 15:2004 and CIE 167:2005 recommendations or given extrapolation arguments.
- Parameters:
shape (SpectralShape) – Spectral shape used for extrapolation.
extrapolator (Type[ProtocolExtrapolator] | None) – Extrapolator class type to use as extrapolating function.
extrapolator_kwargs (dict | None) – Arguments to use when instantiating the extrapolating function.
- Returns:
Extrapolated multi-spectral distributions.
- Return type:
References
[CIET13805d], [CIET14804c]
Examples
>>> from colour.utilities import numpy_print_options >>> data = { ... 500: (0.004900, 0.323000, 0.272000), ... 510: (0.009300, 0.503000, 0.158200), ... 520: (0.063270, 0.710000, 0.078250), ... 530: (0.165500, 0.862000, 0.042160), ... 540: (0.290400, 0.954000, 0.020300), ... 550: (0.433450, 0.994950, 0.008750), ... 560: (0.594500, 0.995000, 0.003900), ... } >>> msds = MultiSpectralDistributions(data) >>> msds.extrapolate(SpectralShape(400, 700, 10)).shape SpectralShape(400.0, 700.0, 10.0) >>> with numpy_print_options(suppress=True): ... print(msds) [[ 400. 0.0049 0.323 0.272 ] [ 410. 0.0049 0.323 0.272 ] [ 420. 0.0049 0.323 0.272 ] [ 430. 0.0049 0.323 0.272 ] [ 440. 0.0049 0.323 0.272 ] [ 450. 0.0049 0.323 0.272 ] [ 460. 0.0049 0.323 0.272 ] [ 470. 0.0049 0.323 0.272 ] [ 480. 0.0049 0.323 0.272 ] [ 490. 0.0049 0.323 0.272 ] [ 500. 0.0049 0.323 0.272 ] [ 510. 0.0093 0.503 0.1582 ] [ 520. 0.06327 0.71 0.07825] [ 530. 0.1655 0.862 0.04216] [ 540. 0.2904 0.954 0.0203 ] [ 550. 0.43345 0.99495 0.00875] [ 560. 0.5945 0.995 0.0039 ] [ 570. 0.5945 0.995 0.0039 ] [ 580. 0.5945 0.995 0.0039 ] [ 590. 0.5945 0.995 0.0039 ] [ 600. 0.5945 0.995 0.0039 ] [ 610. 0.5945 0.995 0.0039 ] [ 620. 0.5945 0.995 0.0039 ] [ 630. 0.5945 0.995 0.0039 ] [ 640. 0.5945 0.995 0.0039 ] [ 650. 0.5945 0.995 0.0039 ] [ 660. 0.5945 0.995 0.0039 ] [ 670. 0.5945 0.995 0.0039 ] [ 680. 0.5945 0.995 0.0039 ] [ 690. 0.5945 0.995 0.0039 ] [ 700. 0.5945 0.995 0.0039 ]]
- align(shape: SpectralShape, interpolator: Type[ProtocolInterpolator] | None = None, interpolator_kwargs: dict | None = None, extrapolator: Type[ProtocolExtrapolator] | None = None, extrapolator_kwargs: dict | None = None) Self [source]#
Align the multi-spectral distributions in-place to given spectral shape: Interpolates first then extrapolates to fit the given range.
Interpolation is performed according to CIE 167:2005 recommendation (if the interpolator has not been changed at instantiation time) or given interpolation arguments.
The logic for choosing the interpolator class when
interpolator
is not given is as follows:if self.interpolator not in ( SpragueInterpolator, CubicSplineInterpolator, ): interpolator = self.interpolator elif self.is_uniform(): interpolator = SpragueInterpolator else: interpolator = CubicSplineInterpolator
The logic for choosing the interpolator keyword arguments when
interpolator_kwargs
is not given is as follows:if self.interpolator not in ( SpragueInterpolator, CubicSplineInterpolator, ): interpolator_kwargs = self.interpolator_kwargs else: interpolator_kwargs = {}
- Parameters:
shape (SpectralShape) – Spectral shape used for alignment.
interpolator (Type[ProtocolInterpolator] | None) – Interpolator class type to use as interpolating function.
interpolator_kwargs (dict | None) – Arguments to use when instantiating the interpolating function.
extrapolator (Type[ProtocolExtrapolator] | None) – Extrapolator class type to use as extrapolating function.
extrapolator_kwargs (dict | None) – Arguments to use when instantiating the extrapolating function.
- Returns:
Aligned multi-spectral distributions.
- Return type:
Examples
>>> from colour.utilities import numpy_print_options >>> data = { ... 500: (0.004900, 0.323000, 0.272000), ... 510: (0.009300, 0.503000, 0.158200), ... 520: (0.063270, 0.710000, 0.078250), ... 530: (0.165500, 0.862000, 0.042160), ... 540: (0.290400, 0.954000, 0.020300), ... 550: (0.433450, 0.994950, 0.008750), ... 560: (0.594500, 0.995000, 0.003900), ... } >>> msds = MultiSpectralDistributions(data) >>> with numpy_print_options(suppress=True): ... print(msds.align(SpectralShape(505, 565, 1))) ... [[ 505. 0.0031582... 0.4091067... 0.2126801...] [ 506. 0.0035019... 0.4268629... 0.2012748...] [ 507. 0.0042365... 0.4450668... 0.1900968...] [ 508. 0.0054192... 0.4638181... 0.1791709...] [ 509. 0.0070965... 0.4831505... 0.1685260...] [ 510. 0.0093 ... 0.503 ... 0.1582 ...] [ 511. 0.0120562... 0.5232543... 0.1482365...] [ 512. 0.0154137... 0.5439717... 0.1386625...] [ 513. 0.0193991... 0.565139 ... 0.1294993...] [ 514. 0.0240112... 0.5866255... 0.1207676...] [ 515. 0.0292289... 0.6082226... 0.1124864...] [ 516. 0.0350192... 0.6296821... 0.1046717...] [ 517. 0.0413448... 0.6507558... 0.0973361...] [ 518. 0.0481727... 0.6712346... 0.0904871...] [ 519. 0.0554816... 0.6909873... 0.0841267...] [ 520. 0.06327 ... 0.71 ... 0.07825 ...] [ 521. 0.0715642... 0.7283456... 0.0728614...] [ 522. 0.0803970... 0.7459679... 0.0680051...] [ 523. 0.0897629... 0.7628184... 0.0636823...] [ 524. 0.0996227... 0.7789004... 0.0598449...] [ 525. 0.1099142... 0.7942533... 0.0564111...] [ 526. 0.1205637... 0.8089368... 0.0532822...] [ 527. 0.1314973... 0.8230153... 0.0503588...] [ 528. 0.1426523... 0.8365417... 0.0475571...] [ 529. 0.1539887... 0.8495422... 0.0448253...] [ 530. 0.1655 ... 0.862 ... 0.04216 ...] [ 531. 0.1772055... 0.8738585... 0.0395936...] [ 532. 0.1890877... 0.8850940... 0.0371046...] [ 533. 0.2011304... 0.8957073... 0.0346733...] [ 534. 0.2133310... 0.9057092... 0.0323006...] [ 535. 0.2256968... 0.9151181... 0.0300011...] [ 536. 0.2382403... 0.9239560... 0.0277974...] [ 537. 0.2509754... 0.9322459... 0.0257131...] [ 538. 0.2639130... 0.9400080... 0.0237668...] [ 539. 0.2770569... 0.9472574... 0.0219659...] [ 540. 0.2904 ... 0.954 ... 0.0203 ...] [ 541. 0.3039194... 0.9602409... 0.0187414...] [ 542. 0.3175893... 0.9660106... 0.0172748...] [ 543. 0.3314022... 0.9713260... 0.0158947...] [ 544. 0.3453666... 0.9761850... 0.0146001...] [ 545. 0.3595019... 0.9805731... 0.0133933...] [ 546. 0.3738324... 0.9844703... 0.0122777...] [ 547. 0.3883818... 0.9878583... 0.0112562...] [ 548. 0.4031674... 0.9907270... 0.0103302...] [ 549. 0.4181943... 0.9930817... 0.0094972...] [ 550. 0.43345 ... 0.99495 ... 0.00875 ...] [ 551. 0.4489082... 0.9963738... 0.0080748...] [ 552. 0.4645599... 0.9973682... 0.0074580...] [ 553. 0.4803950... 0.9979568... 0.0068902...] [ 554. 0.4963962... 0.9981802... 0.0063660...] [ 555. 0.5125410... 0.9980910... 0.0058818...] [ 556. 0.5288034... 0.9977488... 0.0054349...] [ 557. 0.5451560... 0.9972150... 0.0050216...] [ 558. 0.5615719... 0.9965479... 0.0046357...] [ 559. 0.5780267... 0.9957974... 0.0042671...] [ 560. 0.5945 ... 0.995 ... 0.0039 ...] [ 561. 0.5945 ... 0.995 ... 0.0039 ...] [ 562. 0.5945 ... 0.995 ... 0.0039 ...] [ 563. 0.5945 ... 0.995 ... 0.0039 ...] [ 564. 0.5945 ... 0.995 ... 0.0039 ...] [ 565. 0.5945 ... 0.995 ... 0.0039 ...]]
- trim(shape: SpectralShape) Self [source]#
Trim the multi-spectral distributions wavelengths to given shape.
- Parameters:
shape (SpectralShape) – Spectral shape used for trimming.
- Returns:
Trimmed multi-spectral distributions.
- Return type:
Examples
>>> from colour.utilities import numpy_print_options >>> data = { ... 500: (0.004900, 0.323000, 0.272000), ... 510: (0.009300, 0.503000, 0.158200), ... 520: (0.063270, 0.710000, 0.078250), ... 530: (0.165500, 0.862000, 0.042160), ... 540: (0.290400, 0.954000, 0.020300), ... 550: (0.433450, 0.994950, 0.008750), ... 560: (0.594500, 0.995000, 0.003900), ... } >>> msds = MultiSpectralDistributions(data) >>> msds = msds.interpolate(SpectralShape(500, 560, 1)) >>> with numpy_print_options(suppress=True): ... print(msds.trim(SpectralShape(520, 580, 5))) ... [[ 520. 0.06327 ... 0.71 ... 0.07825 ...] [ 521. 0.0715642... 0.7283456... 0.0728614...] [ 522. 0.0803970... 0.7459679... 0.0680051...] [ 523. 0.0897629... 0.7628184... 0.0636823...] [ 524. 0.0996227... 0.7789004... 0.0598449...] [ 525. 0.1099142... 0.7942533... 0.0564111...] [ 526. 0.1205637... 0.8089368... 0.0532822...] [ 527. 0.1314973... 0.8230153... 0.0503588...] [ 528. 0.1426523... 0.8365417... 0.0475571...] [ 529. 0.1539887... 0.8495422... 0.0448253...] [ 530. 0.1655 ... 0.862 ... 0.04216 ...] [ 531. 0.1772055... 0.8738585... 0.0395936...] [ 532. 0.1890877... 0.8850940... 0.0371046...] [ 533. 0.2011304... 0.8957073... 0.0346733...] [ 534. 0.2133310... 0.9057092... 0.0323006...] [ 535. 0.2256968... 0.9151181... 0.0300011...] [ 536. 0.2382403... 0.9239560... 0.0277974...] [ 537. 0.2509754... 0.9322459... 0.0257131...] [ 538. 0.2639130... 0.9400080... 0.0237668...] [ 539. 0.2770569... 0.9472574... 0.0219659...] [ 540. 0.2904 ... 0.954 ... 0.0203 ...] [ 541. 0.3039194... 0.9602409... 0.0187414...] [ 542. 0.3175893... 0.9660106... 0.0172748...] [ 543. 0.3314022... 0.9713260... 0.0158947...] [ 544. 0.3453666... 0.9761850... 0.0146001...] [ 545. 0.3595019... 0.9805731... 0.0133933...] [ 546. 0.3738324... 0.9844703... 0.0122777...] [ 547. 0.3883818... 0.9878583... 0.0112562...] [ 548. 0.4031674... 0.9907270... 0.0103302...] [ 549. 0.4181943... 0.9930817... 0.0094972...] [ 550. 0.43345 ... 0.99495 ... 0.00875 ...] [ 551. 0.4489082... 0.9963738... 0.0080748...] [ 552. 0.4645599... 0.9973682... 0.0074580...] [ 553. 0.4803950... 0.9979568... 0.0068902...] [ 554. 0.4963962... 0.9981802... 0.0063660...] [ 555. 0.5125410... 0.9980910... 0.0058818...] [ 556. 0.5288034... 0.9977488... 0.0054349...] [ 557. 0.5451560... 0.9972150... 0.0050216...] [ 558. 0.5615719... 0.9965479... 0.0046357...] [ 559. 0.5780267... 0.9957974... 0.0042671...] [ 560. 0.5945 ... 0.995 ... 0.0039 ...]]
- normalise(factor: Real = 1) Self [source]#
Normalise the multi-spectral distributions with given normalization factor.
- Parameters:
factor (Real) – Normalization factor.
- Returns:
Normalised multi- spectral distribution.
- Return type:
Notes
The implementation uses the maximum value for each
colour.SpectralDistribution
class instances.
Examples
>>> from colour.utilities import numpy_print_options >>> data = { ... 500: (0.004900, 0.323000, 0.272000), ... 510: (0.009300, 0.503000, 0.158200), ... 520: (0.063270, 0.710000, 0.078250), ... 530: (0.165500, 0.862000, 0.042160), ... 540: (0.290400, 0.954000, 0.020300), ... 550: (0.433450, 0.994950, 0.008750), ... 560: (0.594500, 0.995000, 0.003900), ... } >>> msds = MultiSpectralDistributions(data) >>> with numpy_print_options(suppress=True): ... print(msds.normalise()) [[ 500. 0.0082422... 0.3246231... 1. ...] [ 510. 0.0156434... 0.5055276... 0.5816176...] [ 520. 0.1064255... 0.7135678... 0.2876838...] [ 530. 0.2783852... 0.8663316... 0.155 ...] [ 540. 0.4884777... 0.9587939... 0.0746323...] [ 550. 0.7291000... 0.9999497... 0.0321691...] [ 560. 1. ... 1. ... 0.0143382...]]
- to_sds() List[SpectralDistribution] [source]#
Convert the multi-spectral distributions to a list of spectral distributions.
- Returns:
List of spectral distributions.
- Return type:
Examples
>>> from colour.utilities import numpy_print_options >>> data = { ... 500: (0.004900, 0.323000, 0.272000), ... 510: (0.009300, 0.503000, 0.158200), ... 520: (0.063270, 0.710000, 0.078250), ... 530: (0.165500, 0.862000, 0.042160), ... 540: (0.290400, 0.954000, 0.020300), ... 550: (0.433450, 0.994950, 0.008750), ... 560: (0.594500, 0.995000, 0.003900), ... } >>> msds = MultiSpectralDistributions(data) >>> with numpy_print_options(suppress=True): ... for sd in msds.to_sds(): ... print(sd) [[ 500. 0.0049 ...] [ 510. 0.0093 ...] [ 520. 0.06327...] [ 530. 0.1655 ...] [ 540. 0.2904 ...] [ 550. 0.43345...] [ 560. 0.5945 ...]] [[ 500. 0.323 ...] [ 510. 0.503 ...] [ 520. 0.71 ...] [ 530. 0.862 ...] [ 540. 0.954 ...] [ 550. 0.99495...] [ 560. 0.995 ...]] [[ 500. 0.272 ...] [ 510. 0.1582 ...] [ 520. 0.07825...] [ 530. 0.04216...] [ 540. 0.0203 ...] [ 550. 0.00875...] [ 560. 0.0039 ...]]