@@ -183,102 +183,41 @@ public NDArray this[NDArray<bool> booleanArray]
183183 /// <returns>element from internal storage</returns>
184184 private NDArray GetData ( params int [ ] indice )
185185 {
186- int offset = 0 ;
187-
188186 Shape s1 = shape . Skip ( indice . Length ) . ToArray ( ) ;
189- int idx = s1 . GetIndexInShape ( indice ) ;
190-
191- int stride = Shape . GetSize ( s1 . Dimensions ) ;
192-
193- if ( ndim == 1 )
194- offset = idx + ( slice is null ? 0 : slice . Start . Value ) ;
195- else
196- offset = idx + ( slice is null ? 0 : slice . Start . Value ) * stride ;
197-
187+ var nd = new NDArray ( dtype , s1 ) ;
188+ //nd.Storage.Slice = new Slice($"{}");
198189 switch ( Type . GetTypeCode ( dtype ) )
199190 {
200191 case TypeCode . Boolean :
201- return GetBoolean ( indice ) ;
192+ nd . Array = Storage . GetSpanData < bool > ( indice ) . ToArray ( ) ;
193+ break ;
202194 case TypeCode . Int16 :
203- return GetInt16 ( indice ) ;
195+ nd . Array = Storage . GetSpanData < short > ( indice ) . ToArray ( ) ;
196+ break ;
204197 case TypeCode . Int32 :
205- return GetInt32 ( indice ) ;
198+ nd . Array = Storage . GetSpanData < int > ( indice ) . ToArray ( ) ;
199+ break ;
206200 case TypeCode . Int64 :
207- return GetInt64 ( indice ) ;
201+ nd . Array = Storage . GetSpanData < long > ( indice ) . ToArray ( ) ;
202+ break ;
208203 case TypeCode . Single :
209- return GetSingle ( indice ) ;
204+ nd . Array = Storage . GetSpanData < float > ( indice ) . ToArray ( ) ;
205+ break ;
210206 case TypeCode . Double :
211- return GetDouble ( indice ) ;
207+ nd . Array = Storage . GetSpanData < double > ( indice ) . ToArray ( ) ;
208+ break ;
212209 case TypeCode . Decimal :
213- return GetDecimal ( indice ) ;
210+ nd . Array = Storage . GetSpanData < decimal > ( indice ) . ToArray ( ) ;
211+ break ;
214212 case TypeCode . String :
215- return GetString ( indice ) ;
213+ nd . Array = Storage . GetSpanData < string > ( indice ) . ToArray ( ) ;
214+ break ;
216215 default :
217- return GetNDArray ( indice ) ;
218- }
219-
220- /*if (indexes.Length == ndim ||
221- shape.Last() == 1)
222- {
223- switch (Type.GetTypeCode(dtype))
224- {
225- case TypeCode.Boolean:
226- return GetBoolean(indexes);
227- case TypeCode.Int16:
228- return GetInt16(indexes);
229- case TypeCode.Int32:
230- return GetInt32(indexes);
231- case TypeCode.Int64:
232- return GetInt64(indexes);
233- case TypeCode.Single:
234- return GetSingle(indexes);
235- case TypeCode.Double:
236- return GetDouble(indexes);
237- case TypeCode.Decimal:
238- return GetDecimal(indexes);
239- case TypeCode.String:
240- return GetString(indexes);
241- default:
242- return GetNDArray(indexes);
243- }
216+ nd . Array = Storage . GetSpanData < NDArray > ( indice ) . ToArray ( ) ;
217+ break ;
244218 }
245- else if (indexes.Length == ndim - 1)
246- {
247- var offset = new int[ndim];
248- for (int i = 0; i < ndim - 1; i++)
249- offset[i] = indexes[i];
250-
251- var nd = new NDArray(dtype, shape[ndim - 1]);
252- var data = GetData();
253- for (int i = 0; i < shape[ndim - 1]; i++)
254- {
255- offset[offset.Length - 1] = i;
256- //nd.SetData(data.GetValue(Shape.GetIndexInShape(offset)), i);
257- }
258219
259- return nd;
260- }
261- // 3 Dim
262- else if (indexes.Length == ndim - 2)
263- {
264- var offset = new int[ndim];
265- var nd = new NDArray(dtype, new int[] { shape[ndim - 2], shape[ndim - 1] });
266- var data = GetData();
267- for (int i = 0; i < shape[ndim - 2]; i++)
268- {
269- for (int j = 0; j < shape[ndim - 1]; j++)
270- {
271- offset[0] = 0;
272- offset[1] = i;
273- offset[2] = j;
274- //nd.SetData(data.GetValue(Shape.GetIndexInShape(offset)), i, j);
275- }
276- }
277-
278- return nd;
279- }*/
280-
281- throw new Exception ( "NDStorage.GetData" ) ;
220+ return nd ;
282221 }
283222 }
284223}
0 commit comments