Struct net_ensembles::sampling::heatmap::HeatmapUsize [−][src]
pub struct HeatmapUsize<HistWidth, HistHeight> { /* fields omitted */ }
Expand description
Heatmap
- stores heatmap in row-major order: the rows of the heatmap are contiguous, and the columns are strided
- enables you to quickly create a heatmap
- you can create gnuplot scripts to plot the heatmap
- you can transpose the heatmap
- …
Implementations
impl<HistWidth, HistHeight> HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
impl<HistWidth, HistHeight> HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
Use this to get a “flipped” heatmap
- creates a transposed heatmap
- also look at
self.transpose_inplace
Use this to get a “flipped” heatmap
- transposes the heatmap inplace
Returns value stored in the heatmap at specified
coordinates, or None
, if out of Bounds
row of the heatmap
None
if out of bounds- otherwise it is a slice of the row at height
y
Note
- there is no
get_column
method, because, due to implementation details, it is way less efficient, and could not be returned as slice
Returns value stored in the heatmap at specified coordinates without performing bound checks. undefined behavior if coordinates are out of bounds
returns width of the heatmap
- the width is the same size, as the
self.width_projection().bin_count()
returns height of the heatmap
- the height is the same size, as the
self.height_projection().bin_count()
Returns reference to current width Histogram
- histogram used to bin in the “width” direction
- all
counts
are counted here -> this is a projection of the heatmap
Returns reference to current height Histogram
- histogram used to bin in the “height” direction
- all
counts
are counted here -> this is a projection of the heatmap
impl<HistWidth, HistHeight> HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Histogram,
HistHeight: Histogram,
impl<HistWidth, HistHeight> HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Histogram,
HistHeight: Histogram,
pub fn new(
width_hist: HistWidth,
height_hist: HistHeight
) -> HeatmapUsize<HistWidth, HistHeight>
pub fn new(
width_hist: HistWidth,
height_hist: HistHeight
) -> HeatmapUsize<HistWidth, HistHeight>
Create a new Heatmap
- heatmap will have width
width_hist.bin_count()
and heightheight_hist.bin_count()
- histograms will be reset (zeroed) here, so it does not matter, if they were used before and contain Data
Reset
- resets histograms
- heatmap is reset to contain only 0’s
- miss_count is reset to 0
pub fn combine<OtherHW, OtherHH>(
&mut self,
other: &HeatmapUsize<OtherHW, OtherHH>
) -> Result<(), HeatmapError> where
OtherHW: Histogram,
OtherHH: Histogram,
pub fn combine<OtherHW, OtherHH>(
&mut self,
other: &HeatmapUsize<OtherHW, OtherHH>
) -> Result<(), HeatmapError> where
OtherHW: Histogram,
OtherHH: Histogram,
“combine” heatmaps
- heatmaps will be combined by adding all entrys of
other
toself
- heatmaps have to have the same dimensions
counts how often the heatmap was hit
- should be equal to
self.heatmap.iter().sum::<usize>()
but more efficient - Note: it calculates this in O(min(self.width, self.height))
returns heatmap
- each vector entry will contain the number of times, the corresponding bin was hit
- an entry is 0 if it was never hit
Access indices; understanding how the data is mapped
- A specific heatmap location
(x,y)
corresponds to the indexy * self.width() + x
- you can use the
heatmap_index
function to calculate the index
returns Vector representing normalized heatmap
- Vector contains only 0.0, if nothing was in the heatmap
- otherwise the sum of this Vector is 1.0 (or at least very close to 1.0)
Access indices; understanding how the data is mapped
- A specific heatmap location (x,y)
corresponds to the index
y * self.width() + x
- you can use the function
heatmap_index(width, x, y)
for calculating the index
pub fn heatmap_normalized(&self) -> HeatmapF64<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
pub fn heatmap_normalized(&self) -> HeatmapF64<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
returns normalized heatmap
- returns normalized heatmap as
HeatmapF64
- Heatmap vector
self.heatmap_normalized().heatmap()
contains only 0.0, if nothing was in the heatmap - otherwise the sum of this Vector is 1.0 (within numerical errors)
returns normalized heatmap
- returns normalized heatmap as
HeatmapF64
- Heatmap vector
self.heatmap_normalized().heatmap()
contains only 0.0, if nothing was in the heatmap - otherwise the sum of this Vector is 1.0 (within numerical errors)
returns vector representing heatmap, normalized column wise
- Vector contains only 0.0, if nothing was in the heatmap
- otherwise the sum of each column (fixed x) will be 1.0 (within numerical errors), if it contained at least one hit. If it did not, the column will only consist of 0.0
Access indices; understanding how the data is mapped
A specific heatmap location (x,y)
corresponds to the index y * self.width() + x
- you can use the function
heatmap_index(width, x, y)
for calculating the index
pub fn heatmap_normalized_columns(&self) -> HeatmapF64<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
pub fn heatmap_normalized_columns(&self) -> HeatmapF64<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
returns (column wise) normalized heatmap
- returns normalized heatmap as
HeatmapF64
- Heatmap vector
self.heatmap_normalized().heatmap()
contains only 0.0, if nothing was in the heatmap - otherwise the sum of each column (fixed x) will be 1.0 (within numerical errors), if it contained at least one hit. If it did not, the column will only consist of 0.0
- otherwise the sum of this Vector is 1.0
returns (column wise) normalized heatmap
- returns normalized heatmap as
HeatmapF64
- Heatmap vector
self.heatmap_normalized().heatmap()
contains only 0.0, if nothing was in the heatmap - otherwise the sum of each column (fixed x) will be 1.0 (within numerical errors), if it contained at least one hit. If it did not, the column will only consist of 0.0
- otherwise the sum of this Vector is 1.0
returns vector representing heatmap, normalized row wise
- Vector contains only 0.0, if nothing was in the heatmap
- otherwise the sum of each row (fixed x) will be 1.0 (within numerical errors), if it contained at least one hit. If it did not, the row will only consist of 0.0
Access indices; understanding how the data is mapped
A specific heatmap location (x,y)
corresponds to the index y * self.width() + x
- you can use the function
heatmap_index(width, x, y)
for calculating the index
pub fn heatmap_normalized_rows(&self) -> HeatmapF64<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
pub fn heatmap_normalized_rows(&self) -> HeatmapF64<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
returns (row wise) normalized heatmap
- returns normalized heatmap as
HeatmapF64
- Heatmap vector
self.heatmap_normalized().heatmap()
contains only 0.0, if nothing was in the heatmap - otherwise the sum of each row (fixed x) will be 1.0 (within numerical errors), if it contained at least one hit. If it did not, the row will only consist of 0.0
- otherwise the sum of this Vector is 1.0
returns (row wise) normalized heatmap
- returns normalized heatmap as
HeatmapF64
- Heatmap vector
self.heatmap_normalized().heatmap()
contains only 0.0, if nothing was in the heatmap - otherwise the sum of each row (fixed x) will be 1.0 (within numerical errors), if it contained at least one hit. If it did not, the row will only consist of 0.0
- otherwise the sum of this Vector is 1.0
pub fn count<A, B, X, Y>(
&mut self,
width_val: A,
height_val: B
) -> Result<(usize, usize), HeatmapError> where
A: Borrow<X>,
B: Borrow<Y>,
HistWidth: HistogramVal<X>,
HistHeight: HistogramVal<Y>,
pub fn count<A, B, X, Y>(
&mut self,
width_val: A,
height_val: B
) -> Result<(usize, usize), HeatmapError> where
A: Borrow<X>,
B: Borrow<Y>,
HistWidth: HistogramVal<X>,
HistHeight: HistogramVal<Y>,
update the heatmap
- calculates the coordinate
(x, y)
of the bin corresponding to the given value pair(width_val, height_val)
- if coordinate is out of bounds, it counts a “miss” and returns the HeatmapError
- otherwise it counts the “hit” and returns the coordinate
(x, y)
Write heatmap to file
- writes data of heatmap to file.
file
- lets assume
self.width()
is 4 andself.height()
is 3 - the resulting file could look like
0 1 0 10
100 0 0 1
2 9 1 0
Create a gnuplot script to plot your heatmap
writer
: The gnuplot script will be written to thisgnuplot_output_name
: how shall the file, created by executing gnuplot, be called? Ending of file will be set automatically
Note
- This is the same as calling
gnuplot
with defaultGnuplotSettings
- The default axis are the bin indices, which, e.g, means they always begin at 0. You have to set the axis via the GnuplotSettings
Create a gnuplot script to plot your heatmap
This function writes a file, that can be plotted via the terminal via gnuplot
gnuplot gnuplot_file
Parameter:
gnuplot_writer
: writer gnuplot script will be written tognuplot_output_name
: how shall the file, created by executing gnuplot, be called? Ending of file will be set automaticallysettings
: Here you can set the axis, choose between terminals and more. I recommend that you take a look at GnuplotSettings
Note
The default axis are the bin indices, which, e.g, means they always begin at 0. You have to set the axis via the GnuplotSettings
Example
use rand_pcg::Pcg64;
use rand::{SeedableRng, distributions::*};
use sampling::*;
use std::fs::File;
use std::io::BufWriter;
// first randomly create a heatmap
let h_x = HistUsizeFast::new_inclusive(0, 10).unwrap();
let h_y = HistU8Fast::new_inclusive(0, 10).unwrap();
let mut heatmap = HeatmapU::new(h_x, h_y);
heatmap.count(0, 0).unwrap();
heatmap.count(10, 0).unwrap();
let mut rng = Pcg64::seed_from_u64(27456487);
let x_distr = Uniform::new_inclusive(0, 10_usize);
let y_distr = Uniform::new_inclusive(0, 10_u8);
for _ in 0..100000 {
let x = x_distr.sample(&mut rng);
let y = y_distr.sample(&mut rng);
heatmap.count(x, y).unwrap();
}
// create File for gnuplot script
let file = File::create("heatmap.gp").unwrap();
let buf = BufWriter::new(file);
// Choose settings for gnuplot
let mut settings = GnuplotSettings::new();
settings.x_axis(GnuplotAxis::new(-5.0, 5.0, 6))
.y_axis(GnuplotAxis::from_slice(&["a", "b", "c", "d"]))
.y_label("letter")
.x_label("number")
.title("Example");
// create gnuplot script
heatmap.gnuplot(
buf,
"heatmap.pdf",
settings
).unwrap();
gnuplot script can now be plotted with
gnuplot heatmap.gp
Trait Implementations
impl<HistWidth, HistHeight> Clone for HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
impl<HistWidth, HistHeight> Clone for HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Clone,
HistHeight: Clone,
impl<HistWidth, HistHeight> Debug for HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Debug,
HistHeight: Debug,
impl<HistWidth, HistHeight> Debug for HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Debug,
HistHeight: Debug,
impl<'de, HistWidth, HistHeight> Deserialize<'de> for HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Deserialize<'de>,
HistHeight: Deserialize<'de>,
impl<'de, HistWidth, HistHeight> Deserialize<'de> for HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Deserialize<'de>,
HistHeight: Deserialize<'de>,
pub fn deserialize<__D>(
__deserializer: __D
) -> Result<HeatmapUsize<HistWidth, HistHeight>, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
pub fn deserialize<__D>(
__deserializer: __D
) -> Result<HeatmapUsize<HistWidth, HistHeight>, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl<HistWidth, HistHeight> From<HeatmapUsize<HistWidth, HistHeight>> for HeatmapF64<HistWidth, HistHeight> where
HistWidth: Histogram,
HistHeight: Histogram,
impl<HistWidth, HistHeight> From<HeatmapUsize<HistWidth, HistHeight>> for HeatmapF64<HistWidth, HistHeight> where
HistWidth: Histogram,
HistHeight: Histogram,
Performs the conversion.
impl<HistWidth, HistHeight> From<HeatmapUsizeMean<HistWidth, HistHeight>> for HeatmapUsize<HistWidth, HistHeight>
impl<HistWidth, HistHeight> From<HeatmapUsizeMean<HistWidth, HistHeight>> for HeatmapUsize<HistWidth, HistHeight>
pub fn from(
heatmap_mean: HeatmapUsizeMean<HistWidth, HistHeight>
) -> HeatmapUsize<HistWidth, HistHeight>
pub fn from(
heatmap_mean: HeatmapUsizeMean<HistWidth, HistHeight>
) -> HeatmapUsize<HistWidth, HistHeight>
Performs the conversion.
impl<HistWidth, HistHeight> Serialize for HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Serialize,
HistHeight: Serialize,
impl<HistWidth, HistHeight> Serialize for HeatmapUsize<HistWidth, HistHeight> where
HistWidth: Serialize,
HistHeight: Serialize,
pub fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
pub fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
Auto Trait Implementations
impl<HistWidth, HistHeight> RefUnwindSafe for HeatmapUsize<HistWidth, HistHeight> where
HistHeight: RefUnwindSafe,
HistWidth: RefUnwindSafe,
impl<HistWidth, HistHeight> Send for HeatmapUsize<HistWidth, HistHeight> where
HistHeight: Send,
HistWidth: Send,
impl<HistWidth, HistHeight> Sync for HeatmapUsize<HistWidth, HistHeight> where
HistHeight: Sync,
HistWidth: Sync,
impl<HistWidth, HistHeight> Unpin for HeatmapUsize<HistWidth, HistHeight> where
HistHeight: Unpin,
HistWidth: Unpin,
impl<HistWidth, HistHeight> UnwindSafe for HeatmapUsize<HistWidth, HistHeight> where
HistHeight: UnwindSafe,
HistWidth: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
pub fn cast_trunc(self) -> T
pub fn cast_trunc(self) -> T
Cast to integer, truncating Read more
pub fn cast_nearest(self) -> T
pub fn cast_nearest(self) -> T
Cast to the nearest integer Read more
pub fn cast_floor(self) -> T
pub fn cast_floor(self) -> T
Cast the floor to an integer Read more
pub fn try_cast_trunc(self) -> Result<T, Error>
pub fn try_cast_trunc(self) -> Result<T, Error>
Try converting to integer with truncation Read more
pub fn try_cast_nearest(self) -> Result<T, Error>
pub fn try_cast_nearest(self) -> Result<T, Error>
Try converting to the nearest integer Read more
pub fn try_cast_floor(self) -> Result<T, Error>
pub fn try_cast_floor(self) -> Result<T, Error>
Try converting the floor to an integer Read more
pub fn try_cast_ceil(self) -> Result<T, Error>
pub fn try_cast_ceil(self) -> Result<T, Error>
Try convert the ceiling to an integer Read more