Mảng Dask

Lập trình song song với Dask trong Python

James Fulton

Climate informatics researcher

Chia khối mảng

Hiển thị một mảng như một khối đơn

Lập trình song song với Dask trong Python

Chia khối mảng

Hiển thị một mảng được chia thành nhiều khối

Lập trình song song với Dask trong Python

NumPy vs. mảng Dask

Hiển thị một mảng như một khối đơn

import numpy as np

x = np.ones((4000, 6000))
print(x.sum())
24000000.0
  • Mất 740 mili giây để chạy

Hiển thị một mảng được chia thành nhiều khối

import dask.array as da

x = da.ones((4000, 6000), chunks=(1000,2000))
print(x.sum().compute())
24000000.0
  • Mất 60 mili giây để chạy
Lập trình song song với Dask trong Python

Đồ thị tác vụ mảng Dask

Minh họa các nhánh của đồ thị tác vụ hội tụ để cho ra kết quả cuối.

Lập trình song song với Dask trong Python

Phương thức của mảng Dask

Mảng Dask có hầu hết các phương thức của mảng NumPy.

  • x.max()
  • x.min()
  • x.sum()
  • x.mean()
  • v.v.
print(sum_down_columns.compute())
array([1000., 1000., 1000., 1000., 
    1000., 1000., 1000., 1000., 1000.,
    1000.])
Lập trình song song với Dask trong Python

Xử lý mảng Dask như mảng NumPy

# Tính toán lười với mảng Dask
y1 = x**2 + 2*x + 1

# Cắt lát (slicing) lười
y2 = x[:10]

# Áp dụng hàm NumPy cũng là lười
y3 = np.sin(x)
print(y1)
dask.array<add, shape=(1000, 10), ...
print(y2)
dask.array<getitem, shape=(10, 10), ...
print(y3)
dask.array<sin, shape=(1000, 10), ...
Lập trình song song với Dask trong Python

Nạp mảng ảnh

import dask.array as da

import da.image
image_array = da.image.imread('images/*.png')
print(image_array)
dask.array<imread, shape=(40000, 256, 256, 3), dtype=uint8, 
    chunksize=(1, 256, 256, 3), chunktype=numpy.ndarray>
Lập trình song song với Dask trong Python

Áp dụng hàm tùy chỉnh theo khối

def instagram_filter(image):
    ...
    return pretty_image

# Áp dụng hàm cho từng ảnh độc lập pretty_image_array = image_array.map_blocks(instagram_filter)
print(pretty_image_array)
dask.array<instagram_filter, shape=(40000, 256, 256, 3), dtype=uint8, 
    chunksize=(1, 256, 256, 3), chunktype=numpy.ndarray>
Lập trình song song với Dask trong Python

Vamos praticar!

Lập trình song song với Dask trong Python

Preparing Video For Download...