pub struct Array<T> { /* private fields */ }Expand description
Multi-dimensional array structure, similar to numpy’s ndarray
Implementations§
Source§impl<T> Array<T>
impl<T> Array<T>
Sourcepub fn from_vec(data: Vec<T>, shape: Vec<usize>) -> Result<Self, String>
pub fn from_vec(data: Vec<T>, shape: Vec<usize>) -> Result<Self, String>
Create array from data and shape
Examples found in repository?
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}Sourcepub fn zeros(shape: Vec<usize>) -> Self
pub fn zeros(shape: Vec<usize>) -> Self
Create zero array
Examples found in repository?
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}Sourcepub fn ones(shape: Vec<usize>) -> Self
pub fn ones(shape: Vec<usize>) -> Self
Create ones array
Examples found in repository?
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}Sourcepub fn eye(n: usize) -> Self
pub fn eye(n: usize) -> Self
Create identity matrix
Examples found in repository?
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}Sourcepub fn reshape(&self, new_shape: Vec<usize>) -> Result<Self, String>
pub fn reshape(&self, new_shape: Vec<usize>) -> Result<Self, String>
Reshape array
Examples found in repository?
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}Sourcepub fn transpose(&self) -> Result<Self, String>
pub fn transpose(&self) -> Result<Self, String>
Transpose array (2D only)
Examples found in repository?
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>
impl<T> Array<T>
Sourcepub fn index_to_flat(&self, indices: &[usize]) -> Result<usize, String>
pub fn index_to_flat(&self, indices: &[usize]) -> Result<usize, String>
Convert multi-dimensional index to flat index
Sourcepub fn broadcast_shapes(
shape1: &[usize],
shape2: &[usize],
) -> Result<Vec<usize>, String>
pub fn broadcast_shapes( shape1: &[usize], shape2: &[usize], ) -> Result<Vec<usize>, String>
Broadcast two shapes to a common shape
Sourcepub fn broadcast_to(&self, target_shape: &[usize]) -> Result<Array<T>, String>where
T: Clone,
pub fn broadcast_to(&self, target_shape: &[usize]) -> Result<Array<T>, String>where
T: Clone,
Broadcast array to target shape
pub fn compute_strides_for_shape(shape: &[usize]) -> Vec<usize>
Source§impl<T> Array<T>where
T: Clone,
impl<T> Array<T>where
T: Clone,
Sourcepub fn add_scalar(&self, scalar: T) -> Array<T>where
T: Add<Output = T>,
pub fn add_scalar(&self, scalar: T) -> Array<T>where
T: Add<Output = T>,
Add scalar to all elements
Examples found in repository?
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}Sourcepub fn sub_scalar(&self, scalar: T) -> Array<T>where
T: Sub<Output = T>,
pub fn sub_scalar(&self, scalar: T) -> Array<T>where
T: Sub<Output = T>,
Subtract scalar from all elements
Sourcepub fn mul_scalar(&self, scalar: T) -> Array<T>where
T: Mul<Output = T>,
pub fn mul_scalar(&self, scalar: T) -> Array<T>where
T: Mul<Output = T>,
Multiply all elements by scalar
Examples found in repository?
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}Sourcepub fn div_scalar(&self, scalar: T) -> Array<T>where
T: Div<Output = T>,
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,
impl<T> Array<T>where
T: Clone,
Sourcepub fn sum(&self) -> T
pub fn sum(&self) -> T
Sum all elements
Examples found in repository?
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}Sourcepub fn mean(&self) -> T
pub fn mean(&self) -> T
Calculate mean of all elements
Examples found in repository?
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}Sourcepub fn mean_int(&self) -> T
pub fn mean_int(&self) -> T
Calculate mean of all elements (integer version)
Examples found in repository?
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}Sourcepub fn max(&self) -> Option<T>where
T: Clone + PartialOrd,
pub fn max(&self) -> Option<T>where
T: Clone + PartialOrd,
Find maximum value
Examples found in repository?
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}Sourcepub fn min(&self) -> Option<T>where
T: Clone + PartialOrd,
pub fn min(&self) -> Option<T>where
T: Clone + PartialOrd,
Find minimum value
Examples found in repository?
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}Sourcepub fn dot(&self, other: &Array<T>) -> Result<Array<T>, String>
pub fn dot(&self, other: &Array<T>) -> Result<Array<T>, String>
Matrix multiplication (dot product)
Examples found in repository?
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}Sourcepub fn map<F, U>(&self, f: F) -> Array<U>
pub fn map<F, U>(&self, f: F) -> Array<U>
Apply function to each element
Examples found in repository?
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}Sourcepub fn sum_axis(&self, axis: usize) -> Result<Array<T>, String>
pub fn sum_axis(&self, axis: usize) -> Result<Array<T>, String>
Sum along specified axis
Examples found in repository?
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}Sourcepub fn sin(&self) -> Array<T>
pub fn sin(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn cos(&self) -> Array<T>
pub fn cos(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn tan(&self) -> Array<T>
pub fn tan(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn asin(&self) -> Array<T>
pub fn asin(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn acos(&self) -> Array<T>
pub fn acos(&self) -> Array<T>
Examples found in repository?
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}pub fn atan(&self) -> Array<T>
pub fn atan2(&self, other: &Array<T>) -> Result<Array<T>, String>
Sourcepub fn sinh(&self) -> Array<T>
pub fn sinh(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn cosh(&self) -> Array<T>
pub fn cosh(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn tanh(&self) -> Array<T>
pub fn tanh(&self) -> Array<T>
Examples found in repository?
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}pub fn asinh(&self) -> Array<T>
pub fn acosh(&self) -> Array<T>
pub fn atanh(&self) -> Array<T>
Sourcepub fn to_radians(&self) -> Array<T>
pub fn to_radians(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn to_degrees(&self) -> Array<T>
pub fn to_degrees(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn ln(&self) -> Array<T>
pub fn ln(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn log10(&self) -> Array<T>
pub fn log10(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn log2(&self) -> Array<T>
pub fn log2(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn log(&self, base: f64) -> Array<T>
pub fn log(&self, base: f64) -> Array<T>
Examples found in repository?
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}Sourcepub fn exp(&self) -> Array<T>
pub fn exp(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn exp2(&self) -> Array<T>
pub fn exp2(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn exp_m1(&self) -> Array<T>
pub fn exp_m1(&self) -> Array<T>
Examples found in repository?
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}Sourcepub fn ln_1p(&self) -> Array<T>
pub fn ln_1p(&self) -> Array<T>
Examples found in repository?
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>
impl<T> Array<T>
Sourcepub fn random(shape: Vec<usize>) -> Self
pub fn random(shape: Vec<usize>) -> Self
Create array with random values between 0 and 1
Examples found in repository?
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}Sourcepub fn randint(shape: Vec<usize>, low: i32, high: i32) -> Self
pub fn randint(shape: Vec<usize>, low: i32, high: i32) -> Self
Create array with random integers in range [low, high)
Examples found in repository?
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}Sourcepub fn randn(shape: Vec<usize>) -> Self
pub fn randn(shape: Vec<usize>) -> Self
Create array with normally distributed random values (Box-Muller transform)
Examples found in repository?
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}Sourcepub fn uniform(shape: Vec<usize>, low: f64, high: f64) -> Self
pub fn uniform(shape: Vec<usize>, low: f64, high: f64) -> Self
Create array with uniformly distributed random values in range [low, high)
Examples found in repository?
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}