@@ -35,61 +35,60 @@ use tensor::Tensor;
3535 let data : Vec <f32 > = (0 .. length ). map (| v | v as f32 + 10.0 ). collect ();
3636
3737 // Create a Tensor, ensuring data.len() matches the product of shape
38- let a = Tensor :: new (shape . clone () , data ). unwrap ();
38+ let a = Tensor :: new (shape , data ). unwrap ();
3939 ```
40402 . ** Zeros and Ones**
4141 ``` rust
4242 // 4x2 filled with zeros
43- let zeros_tensor = Tensor :: zeros (vec! [4 , 2 ]);
43+ let zeros_tensor = Tensor :: zeros (& [4 , 2 ]);
4444
4545 // 1x9x2x5 filled with ones
46- let ones_tensor = Tensor :: ones (vec! [1 , 9 , 2 , 5 ]);
46+ let ones_tensor = Tensor :: ones (& [1 , 9 , 2 , 5 ]);
4747 ```
4848
4949### 2. Indexing and Accessing Data
5050
5151- ** Indexing** via ` Index<Vec<usize>> ` :
5252 ``` rust
53- let t = Tensor :: ones (vec! [2 , 3 ]);
54- // t[vec! [row, col]]
55- assert_eq! (t [vec! [0 , 2 ]], 1.0_f32 );
53+ let t = Tensor :: ones (& [2 , 3 ]);
54+ // t[& [row, col]]
55+ assert_eq! (t [& [0 , 2 ]], 1.0_f32 );
5656 ```
5757- ** Check ` .shape() ` and ` .strides() ` ** :
5858 ``` rust
59- println! (" Shape = {:?}" , t . shape ()); // e.g. [2, 3]
60- println! (" Strides = {:?}" , t . strides ()); // e.g. [3, 1]
59+ println! (" Shape = {:?}" , t . shape ()); // [2, 3]
60+ println! (" Strides = {:?}" , t . strides ()); // [3, 1]
6161 ```
6262- ** Access raw data** :
6363 ``` rust
64- let data_ref : & Vec <f32 > = t . data ();
65- // or get mutable reference with t.data_mut()
64+ let data_ref : & [f32 ] = t . data ();
6665 ```
6766
6867### 3. Movement Ops: Reshaping, Permuting, Flattening, Transposing
6968
70691 . ** Reshape**
7170 ``` rust
72- let mut a = Tensor :: ones (vec! [4 , 2 ]);
73- a . reshape (vec! [2 , 2 , 2 ]). unwrap ();
71+ let mut a = Tensor :: ones (& [4 , 2 ]);
72+ a . reshape (& [2 , 2 , 2 ]). unwrap ();
7473 // shape is now [2, 2, 2]
7574 ```
76752 . ** Permute** (change dimension ordering)
7776 ``` rust
78- let mut a = Tensor :: ones (vec! [1 , 4 , 2 ]);
77+ let mut a = Tensor :: ones (& [1 , 4 , 2 ]);
7978 // reorder dimensions to [1->4, 4->2, 2->1]
80- a . permute (vec! [1 , 2 , 0 ]). unwrap ();
79+ a . permute (& [1 , 2 , 0 ]). unwrap ();
8180 // shape is now [4, 2, 1]
82- // strides updated accordingly
81+ // strides are now [2, 1, 8] as the data was not changed
8382 ```
84833 . ** Flatten**
8584 ``` rust
86- let mut a = Tensor :: ones (vec! [7 , 6 ]);
85+ let mut a = Tensor :: ones (& [7 , 6 ]);
8786 a . flatten ();
8887 // shape becomes [42], strides is [1]
8988 ```
90894 . ** Transpose**
9190 ``` rust
92- let mut a = Tensor :: new (vec! [2 , 3 ], vec! [1 . , 2 . , 3 . , 4 . , 5 . , 6 . ]). unwrap ();
91+ let mut a = Tensor :: new (& [2 , 3 ], vec! [1 . , 2 . , 3 . , 4 . , 5 . , 6 . ]). unwrap ();
9392 a . transpose (). unwrap ();
9493 // shape is now [3, 2], data is reordered
9594 ```
@@ -110,15 +109,14 @@ They also have matching **trait operators**:
110109#### a) Simple Elementwise
111110
112111``` rust
113- let a = Tensor :: ones (vec! [2 , 3 ]);
114- let b = Tensor :: ones (vec! [2 , 3 ]);
112+ let a = Tensor :: ones (& [2 , 3 ]);
113+ let b = Tensor :: ones (& [2 , 3 ]);
115114
116115// Out-of-place
117116let c = a . add (& b ). unwrap (); // or &a + &b
118- // c has all 2.0 values
119117
120118// In-place
121- let mut d = Tensor :: zeros (vec! [2 , 3 ]);
119+ let mut d = Tensor :: zeros (& [2 , 3 ]);
122120d . add_inplace (& c );
123121```
124122
@@ -164,13 +162,13 @@ let c = a.matmul(&b).unwrap();
1641622 . ** Sum Along a Dimension**
165163 ``` rust
166164 let reduced = a . sum_dim (1 ). unwrap ();
167- // For shape [2, 3], sum_dim(1) -> shape [2], data is sum across columns
168- // e.g. [6., 15.]
165+ // For shape [2, 3], sum_dim(1) -> shape [2],
166+ // data is sum across columns [6., 15.]
169167 ```
1701683 . ** Mean** and ** Mean Along Dimension**
171169 ``` rust
172- let m = a . mean (); // overall mean
173- let m_dim = a . mean_dim (0 ); // per-row or per-col mean
170+ let m = a . mean ();
171+ let m_dim = a . mean_dim (0 );
174172 ```
175173
176174### 6. Unary Ops
0 commit comments