Array

Struct Array 

Source
pub struct Array<T> { /* private fields */ }
Expand description

Multi-dimensional array structure, similar to numpy’s ndarray

Implementations§

Source§

impl<T> Array<T>
where T: Clone + Default,

Source

pub fn new(shape: Vec<usize>) -> Self

Create a new multi-dimensional array

Source

pub fn from_vec(data: Vec<T>, shape: Vec<usize>) -> Result<Self, String>

Create array from data and shape

Examples found in repository?
examples/demo.rs (line 20)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn zeros(shape: Vec<usize>) -> Self

Create zero array

Examples found in repository?
examples/demo.rs (line 8)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn ones(shape: Vec<usize>) -> Self
where T: From<u8>,

Create ones array

Examples found in repository?
examples/demo.rs (line 11)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn eye(n: usize) -> Self
where T: From<u8>,

Create identity matrix

Examples found in repository?
examples/demo.rs (line 14)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn reshape(&self, new_shape: Vec<usize>) -> Result<Self, String>

Reshape array

Examples found in repository?
examples/demo.rs (line 25)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn transpose(&self) -> Result<Self, String>

Transpose array (2D only)

Examples found in repository?
examples/demo.rs (line 28)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source§

impl<T> Array<T>

Source

pub fn index_to_flat(&self, indices: &[usize]) -> Result<usize, String>

Convert multi-dimensional index to flat index

Source

pub fn broadcast_shapes( shape1: &[usize], shape2: &[usize], ) -> Result<Vec<usize>, String>

Broadcast two shapes to a common shape

Source

pub fn broadcast_to(&self, target_shape: &[usize]) -> Result<Array<T>, String>
where T: Clone,

Broadcast array to target shape

Source

pub fn compute_strides_for_shape(shape: &[usize]) -> Vec<usize>

Source

pub fn shape(&self) -> &[usize]

Get shape of the array

Source

pub fn ndim(&self) -> usize

Get number of dimensions

Source

pub fn size(&self) -> usize

Get total number of elements

Source

pub fn iter(&self) -> Iter<'_, T>

Get iterator over elements

Source

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Get mutable iterator

Source§

impl<T> Array<T>
where T: Clone,

Source

pub fn add_scalar(&self, scalar: T) -> Array<T>
where T: Add<Output = T>,

Add scalar to all elements

Examples found in repository?
examples/demo.rs (line 53)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn sub_scalar(&self, scalar: T) -> Array<T>
where T: Sub<Output = T>,

Subtract scalar from all elements

Source

pub fn mul_scalar(&self, scalar: T) -> Array<T>
where T: Mul<Output = T>,

Multiply all elements by scalar

Examples found in repository?
examples/demo.rs (line 50)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn div_scalar(&self, scalar: T) -> Array<T>
where T: Div<Output = T>,

Divide all elements by scalar

Source§

impl<T> Array<T>
where T: Clone,

Source

pub fn sum(&self) -> T
where T: Add<Output = T> + Default,

Sum all elements

Examples found in repository?
examples/demo.rs (line 58)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn mean(&self) -> T
where T: Add<Output = T> + Div<Output = T> + Default + Copy, f64: Into<T>,

Calculate mean of all elements

Examples found in repository?
examples/demo.rs (line 92)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn mean_int(&self) -> T
where T: Add<Output = T> + Div<Output = T> + Default + From<usize>,

Calculate mean of all elements (integer version)

Examples found in repository?
examples/demo.rs (line 59)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn max(&self) -> Option<T>
where T: Clone + PartialOrd,

Find maximum value

Examples found in repository?
examples/demo.rs (line 60)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn min(&self) -> Option<T>
where T: Clone + PartialOrd,

Find minimum value

Examples found in repository?
examples/demo.rs (line 61)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn dot(&self, other: &Array<T>) -> Result<Array<T>, String>
where T: Add<Output = T> + Mul<Output = T> + Default,

Matrix multiplication (dot product)

Examples found in repository?
examples/demo.rs (line 45)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn map<F, U>(&self, f: F) -> Array<U>
where F: Fn(&T) -> U, U: Clone + Default,

Apply function to each element

Examples found in repository?
examples/demo.rs (line 73)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn sum_axis(&self, axis: usize) -> Result<Array<T>, String>
where T: Add<Output = T> + Default,

Sum along specified axis

Examples found in repository?
examples/demo.rs (line 65)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn sin(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 153)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn cos(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 154)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn tan(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 155)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn asin(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 163)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn acos(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 164)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn atan(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Source

pub fn atan2(&self, other: &Array<T>) -> Result<Array<T>, String>
where T: Into<f64> + From<f64> + Clone,

Source

pub fn sinh(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 172)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn cosh(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 173)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn tanh(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 174)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn asinh(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Source

pub fn acosh(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Source

pub fn atanh(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Source

pub fn to_radians(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 183)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn to_degrees(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 184)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn ln(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 203)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn log10(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 212)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn log2(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 220)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn log(&self, base: f64) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 233)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn exp(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 199)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn exp2(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 224)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn exp_m1(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 242)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn ln_1p(&self) -> Array<T>
where T: Into<f64> + From<f64> + Clone + Default,

Examples found in repository?
examples/demo.rs (line 246)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source§

impl<T> Array<T>
where T: Clone + Default,

Source

pub fn random(shape: Vec<usize>) -> Self
where T: From<f64> + Clone + Default,

Create array with random values between 0 and 1

Examples found in repository?
examples/demo.rs (line 98)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn randint(shape: Vec<usize>, low: i32, high: i32) -> Self
where T: From<i32> + Clone + Default,

Create array with random integers in range [low, high)

Examples found in repository?
examples/demo.rs (line 102)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn randn(shape: Vec<usize>) -> Self
where T: From<f64> + Clone + Default,

Create array with normally distributed random values (Box-Muller transform)

Examples found in repository?
examples/demo.rs (line 106)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}
Source

pub fn uniform(shape: Vec<usize>, low: f64, high: f64) -> Self
where T: From<f64> + Clone + Default,

Create array with uniformly distributed random values in range [low, high)

Examples found in repository?
examples/demo.rs (line 110)
3fn main() {
4    println!("=== Vectra Multi-dimensional Array Library Demo ===");
5    
6    // 1. Array Creation
7    println!("\n1. Array Creation:");
8    let zeros = Array::<f64>::zeros(vec![2, 3]);
9    println!("Zero array (2x3):\n{}", zeros);
10    
11    let ones = Array::<i32>::ones(vec![3, 3]);
12    println!("\nOnes array (3x3):\n{}", ones);
13    
14    let eye = Array::<i32>::eye(3);
15    println!("\nIdentity matrix (3x3):\n{}", eye);
16    
17    // 2. Create array from vector
18    println!("\n2. Create array from vector:");
19    let data = vec![1, 2, 3, 4, 5, 6];
20    let arr = Array::from_vec(data, vec![2, 3]).unwrap();
21    println!("Array created from vector (2x3):\n{}", arr);
22    
23    // 3. Array operations
24    println!("\n3. Array operations:");
25    let reshaped = arr.reshape(vec![3, 2]).unwrap();
26    println!("Reshaped to (3x2):\n{}", reshaped);
27    
28    let transposed = arr.transpose().unwrap();
29    println!("\nTransposed (3x2):\n{}", transposed);
30    
31    // 4. Mathematical operations
32    println!("\n4. Mathematical operations:");
33    let a = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
34    let b = Array::from_vec(vec![5, 6, 7, 8], vec![2, 2]).unwrap();
35    
36    println!("Matrix A:\n{}", a);
37    println!("\nMatrix B:\n{}", b);
38    
39    let sum = a.clone() + b.clone();
40    println!("\nA + B:\n{}", sum);
41    
42    let product = a.clone() * b.clone();
43    println!("\nA * B (element-wise multiplication):\n{}", product);
44    
45    let dot_product = a.dot(&b).unwrap();
46    println!("\nA · B (matrix multiplication):\n{}", dot_product);
47    
48    // 5. Scalar operations
49    println!("\n5. Scalar operations:");
50    let scalar_mult = a.mul_scalar(3);
51    println!("A * 3:\n{}", scalar_mult);
52    
53    let scalar_add = a.add_scalar(10);
54    println!("\nA + 10:\n{}", scalar_add);
55    
56    // 6. Aggregation functions
57    println!("\n6. Aggregation functions:");
58    println!("Sum of A: {}", a.sum());
59    println!("Mean of A: {}", a.mean_int());
60    println!("Max of A: {:?}", a.max());
61    println!("Min of A: {:?}", a.min());
62    
63    // 7. Sum along axis
64    println!("\n7. Sum along axis:");
65    let sum_axis0 = a.sum_axis(0).unwrap();
66    println!("Sum along axis 0: {}", sum_axis0);
67    
68    let sum_axis1 = a.sum_axis(1).unwrap();
69    println!("Sum along axis 1: {}", sum_axis1);
70    
71    // 8. Function mapping
72    println!("\n8. Function mapping:");
73    let squared = a.map(|x| x * x);
74    println!("A squared:\n{}", squared);
75    
76    let doubled = a.map(|x| x * 2);
77    println!("\nA doubled:\n{}", doubled);
78    
79    // 9. Index access
80    println!("\n9. Index access:");
81    println!("A[0, 0] = {}", a[[0, 0]]);
82    println!("A[1, 1] = {}", a[[1, 1]]);
83    
84    // 10. Large array example
85    println!("\n10. Large array example:");
86    let large_data: Vec<f64> = (1..=20).map(|x| x as f64).collect();
87    let large_arr = Array::from_vec(large_data, vec![4, 5]).unwrap();
88    println!("4x5 array:\n{}", large_arr);
89    
90    let large_sum = large_arr.sum();
91    println!("\nSum of large array: {}", large_sum);
92    println!("Mean of large array: {:.2}", large_arr.mean());
93    
94    // 11. Random number generation
95    println!("\n11. Random number generation:");
96    
97    // Generate random numbers between 0-1
98    let random_arr = Array::<f64>::random(vec![2, 3]);
99    println!("Random array (0-1):\n{}", random_arr);
100    
101    // Generate random integers in specified range
102    let randint_arr = Array::<i32>::randint(vec![2, 3], 1, 10);
103    println!("\nRandom integer array (1-9):\n{}", randint_arr);
104    
105    // Generate normal distribution random numbers
106    let randn_arr = Array::<f64>::randn(vec![2, 2]);
107    println!("\nNormal distribution random array:\n{}", randn_arr);
108    
109    // Generate uniform distribution random numbers in specified range
110    let uniform_arr = Array::<f64>::uniform(vec![2, 2], -2.0, 2.0);
111    println!("\nUniform distribution random array (-2.0 to 2.0):\n{}", uniform_arr);
112    
113    // Random array statistics
114    println!("\nRandom array statistics:");
115    println!("Random array mean: {:.4}", random_arr.mean());
116    println!("Random array max: {:.4}", random_arr.max().unwrap());
117    println!("Random array min: {:.4}", random_arr.min().unwrap());
118    
119    // 12. Broadcasting examples
120    println!("\n12. Broadcasting examples:");
121    
122    // Example 1: Scalar-like array with matrix
123    let matrix = Array::from_vec(vec![1, 2, 3, 4], vec![2, 2]).unwrap();
124    let scalar = Array::from_vec(vec![10], vec![1, 1]).unwrap();
125    let broadcast_result1 = matrix.clone() + scalar.clone();
126    println!("Matrix (2x2):\n{}", matrix);
127    println!("Scalar-like (1x1):\n{}", scalar);
128    println!("Matrix + Scalar:\n{}", broadcast_result1);
129    
130    // Example 2: Vector with matrix
131    let vector = Array::from_vec(vec![1, 2], vec![2]).unwrap();
132    let column = Array::from_vec(vec![10, 20], vec![2, 1]).unwrap();
133    let broadcast_result2 = vector.clone() + column.clone();
134    println!("\nVector (2,):\n{}", vector);
135    println!("Column (2x1):\n{}", column);
136    println!("Vector + Column:\n{}", broadcast_result2);
137    
138    // Example 3: Broadcasting with multiplication
139    let row = Array::from_vec(vec![2, 3], vec![1, 2]).unwrap();
140    let col = Array::from_vec(vec![4, 5, 6], vec![3, 1]).unwrap();
141    let broadcast_result3 = row.clone() * col.clone();
142    println!("\nRow (1x2):\n{}", row);
143    println!("Column (3x1):\n{}", col);
144    println!("Row * Column:\n{}", broadcast_result3);
145    
146    // 13. Trigonometric functions
147    println!("\n13. Trigonometric functions:");
148    
149    use std::f64::consts::PI;
150    let angles = Array::from_vec(vec![0.0, PI/6.0, PI/4.0, PI/3.0, PI/2.0], vec![5]).unwrap();
151    println!("Angles (radians):\n{}", angles);
152    
153    let sin_values = angles.sin();
154    let cos_values = angles.cos();
155    let tan_values = angles.tan();
156    
157    println!("\nSine values:\n{}", sin_values);
158    println!("Cosine values:\n{}", cos_values);
159    println!("Tangent values:\n{}", tan_values);
160    
161    // Inverse trigonometric functions
162    let values = Array::from_vec(vec![0.0, 0.5, 0.866, 1.0], vec![4]).unwrap();
163    let asin_values = values.asin();
164    let acos_values = values.acos();
165    
166    println!("\nValues for inverse functions:\n{}", values);
167    println!("Arcsine values:\n{}", asin_values);
168    println!("Arccosine values:\n{}", acos_values);
169    
170    // Hyperbolic functions
171    let hyp_values = Array::from_vec(vec![0.0, 1.0, 2.0], vec![3]).unwrap();
172    let sinh_values = hyp_values.sinh();
173    let cosh_values = hyp_values.cosh();
174    let tanh_values = hyp_values.tanh();
175    
176    println!("\nHyperbolic functions for [0, 1, 2]:");
177    println!("Sinh values:\n{}", sinh_values);
178    println!("Cosh values:\n{}", cosh_values);
179    println!("Tanh values:\n{}", tanh_values);
180    
181    // Angle conversion
182    let degrees = Array::from_vec(vec![0.0, 30.0, 45.0, 60.0, 90.0], vec![5]).unwrap();
183    let radians_converted = degrees.to_radians();
184    let back_to_degrees = radians_converted.to_degrees();
185    
186    println!("\nAngle conversion:");
187    println!("Degrees:\n{}", degrees);
188    println!("Converted to radians:\n{}", radians_converted);
189    println!("Back to degrees:\n{}", back_to_degrees);
190    
191    // 14. Logarithmic and exponential functions
192    println!("\n14. Logarithmic and exponential functions:");
193    
194    // Natural logarithm and exponential
195    let exp_values = Array::from_vec(vec![0.0, 1.0, 2.0, 3.0], vec![4]).unwrap();
196    println!("Values for exp/ln:");
197    println!("{}", exp_values);
198    
199    let exp_results = exp_values.exp();
200    println!("Exponential (e^x):");
201    println!("{}", exp_results);
202    
203    let ln_results = exp_results.ln();
204    println!("Natural log (should match original):");
205    println!("{}", ln_results);
206    
207    // Base-10 and base-2 logarithms
208    let powers_of_10 = Array::from_vec(vec![1.0, 10.0, 100.0, 1000.0], vec![4]).unwrap();
209    println!("\nPowers of 10:");
210    println!("{}", powers_of_10);
211    
212    let log10_results = powers_of_10.log10();
213    println!("Base-10 logarithm:");
214    println!("{}", log10_results);
215    
216    let powers_of_2 = Array::from_vec(vec![1.0, 2.0, 4.0, 8.0, 16.0], vec![5]).unwrap();
217    println!("\nPowers of 2:");
218    println!("{}", powers_of_2);
219    
220    let log2_results = powers_of_2.log2();
221    println!("Base-2 logarithm:");
222    println!("{}", log2_results);
223    
224    let exp2_results = log2_results.exp2();
225    println!("2^x (should match original):");
226    println!("{}", exp2_results);
227    
228    // Custom base logarithm
229    let base_3_values = Array::from_vec(vec![1.0, 3.0, 9.0, 27.0], vec![4]).unwrap();
230    println!("\nPowers of 3:");
231    println!("{}", base_3_values);
232    
233    let log3_results = base_3_values.log(3.0);
234    println!("Base-3 logarithm:");
235    println!("{}", log3_results);
236    
237    // High precision functions for small values
238    let small_values = Array::from_vec(vec![0.0, 0.01, 0.1, 0.5], vec![4]).unwrap();
239    println!("\nSmall values:");
240    println!("{}", small_values);
241    
242    let exp_m1_results = small_values.exp_m1();
243    println!("exp(x) - 1 (more accurate for small x):");
244    println!("{}", exp_m1_results);
245    
246    let ln_1p_results = small_values.ln_1p();
247    println!("ln(1 + x) (more accurate for small x):");
248    println!("{}", ln_1p_results);
249
250    println!("\n=== Demo Complete ===");
251}

Trait Implementations§

Source§

impl<T> Add for Array<T>
where T: Add<Output = T> + Clone,

Source§

type Output = Array<T>

The resulting type after applying the + operator.
Source§

fn add(self, other: Self) -> Self::Output

Performs the + operation. Read more
Source§

impl<T: Clone> Clone for Array<T>

Source§

fn clone(&self) -> Array<T>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for Array<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Display for Array<T>
where T: Display + Clone,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Div for Array<T>
where T: Div<Output = T> + Clone,

Source§

type Output = Array<T>

The resulting type after applying the / operator.
Source§

fn div(self, other: Self) -> Self::Output

Performs the / operation. Read more
Source§

impl<T> Index<&[usize]> for Array<T>
where T: Clone,

Source§

type Output = T

The returned type after indexing.
Source§

fn index(&self, indices: &[usize]) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<T> Index<[usize; 1]> for Array<T>
where T: Clone,

Source§

type Output = T

The returned type after indexing.
Source§

fn index(&self, indices: [usize; 1]) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<T> Index<[usize; 2]> for Array<T>
where T: Clone,

Source§

type Output = T

The returned type after indexing.
Source§

fn index(&self, indices: [usize; 2]) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<T> Index<[usize; 3]> for Array<T>
where T: Clone,

Source§

type Output = T

The returned type after indexing.
Source§

fn index(&self, indices: [usize; 3]) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<T> IndexMut<&[usize]> for Array<T>
where T: Clone,

Source§

fn index_mut(&mut self, indices: &[usize]) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<T> IndexMut<[usize; 1]> for Array<T>
where T: Clone,

Source§

fn index_mut(&mut self, indices: [usize; 1]) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<T> IndexMut<[usize; 2]> for Array<T>
where T: Clone,

Source§

fn index_mut(&mut self, indices: [usize; 2]) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<T> IndexMut<[usize; 3]> for Array<T>
where T: Clone,

Source§

fn index_mut(&mut self, indices: [usize; 3]) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<T> Mul for Array<T>
where T: Mul<Output = T> + Clone,

Source§

type Output = Array<T>

The resulting type after applying the * operator.
Source§

fn mul(self, other: Self) -> Self::Output

Performs the * operation. Read more
Source§

impl<T: PartialEq> PartialEq for Array<T>

Source§

fn eq(&self, other: &Array<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T> Sub for Array<T>
where T: Sub<Output = T> + Clone,

Source§

type Output = Array<T>

The resulting type after applying the - operator.
Source§

fn sub(self, other: Self) -> Self::Output

Performs the - operation. Read more
Source§

impl<T> StructuralPartialEq for Array<T>

Auto Trait Implementations§

§

impl<T> Freeze for Array<T>

§

impl<T> RefUnwindSafe for Array<T>
where T: RefUnwindSafe,

§

impl<T> Send for Array<T>
where T: Send,

§

impl<T> Sync for Array<T>
where T: Sync,

§

impl<T> Unpin for Array<T>
where T: Unpin,

§

impl<T> UnwindSafe for Array<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V