(x, index, axis=0)
| 340 | |
| 341 | |
| 342 | def take(x, index, axis=0): |
| 343 | if not np.isnan(x.chunks[axis]).any(): |
| 344 | from dask.array._array_expr._shuffle import _shuffle |
| 345 | from dask.array.utils import arange_safe, asarray_safe |
| 346 | |
| 347 | arange = arange_safe(np.sum(x.chunks[axis]), like=index) |
| 348 | if len(index) == len(arange) and np.abs(index - arange).sum() == 0: |
| 349 | # no-op |
| 350 | return x |
| 351 | |
| 352 | average_chunk_size = int(sum(x.chunks[axis]) / len(x.chunks[axis])) |
| 353 | |
| 354 | indexer = [] |
| 355 | index = asarray_safe(index, like=index) |
| 356 | for i in range(0, len(index), average_chunk_size): |
| 357 | indexer.append(index[i : i + average_chunk_size].tolist()) |
| 358 | return _shuffle(x, indexer, axis, "getitem-") |
| 359 | elif len(x.chunks[axis]) == 1: |
| 360 | return TakeUnknownOneChunk(x, index, axis) |
| 361 | else: |
| 362 | from dask.array.core import unknown_chunk_message |
| 363 | |
| 364 | raise ValueError( |
| 365 | f"Array chunk size or shape is unknown. {unknown_chunk_message}" |
| 366 | ) |
| 367 | |
| 368 | |
| 369 | class Slice(ArrayExpr): |
searching dependent graphs…