Dask arrays

Parallel Programming with Dask in Python

James Fulton

Climate informatics researcher

การแบ่ง array เป็น chunk

แสดง array เป็นชิ้นเดียว

Parallel Programming with Dask in Python

การแบ่ง array เป็น chunk

แสดง array ที่ถูกแบ่งออกเป็นหลาย chunk

Parallel Programming with Dask in Python

NumPy vs. Dask arrays

แสดง array เป็นชิ้นเดียว

import numpy as np

x = np.ones((4000, 6000))
print(x.sum())
24000000.0
  • ใช้เวลาประมาณ 740 มิลลิวินาที

แสดง array ที่ถูกแบ่งออกเป็นหลาย chunk

import dask.array as da

x = da.ones((4000, 6000), chunks=(1000,2000))
print(x.sum().compute())
24000000.0
  • ใช้เวลาประมาณ 60 มิลลิวินาที
Parallel Programming with Dask in Python

Task graph ของ Dask array

แสดงการรวมกิ่งของ task graph เพื่อให้ได้ผลลัพธ์สุดท้าย

Parallel Programming with Dask in Python

เมธอดของ Dask array

Dask arrays รองรับเมธอดเกือบทั้งหมดที่มีใน NumPy arrays

  • x.max()
  • x.min()
  • x.sum()
  • x.mean()
  • etc.
print(sum_down_columns.compute())
array([1000., 1000., 1000., 1000., 
    1000., 1000., 1000., 1000., 1000.,
    1000.])
Parallel Programming with Dask in Python

ใช้ Dask arrays แบบเดียวกับ NumPy arrays

# Lazy mathematics with Dask array
y1 = x**2 + 2*x + 1

# Lazy slicing
y2 = x[:10]

# Applying NumPy functions is lazy too
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), ...
Parallel Programming with Dask in Python

โหลด array ของรูปภาพ

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>
Parallel Programming with Dask in Python

การใช้ฟังก์ชันกับแต่ละ chunk

def instagram_filter(image):
    ...
    return pretty_image

# Apply function to each image independently 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>
Parallel Programming with Dask in Python

มาฝึกกันเถอะ!

Parallel Programming with Dask in Python

Preparing Video For Download...