Attempt to move away from a LATEX-based HTML repr (which has non-negligible render times for small arrays and causes Jupyter to hang on large arrays) to an HTML table-based repr inspired by Sparse, Dask, and xarray.
This shows a brief demo of what it looks like for small and large arrays
import dask.array as da
import numpy as np
import sparse
import xarray as xr
from pint import UnitRegistry
ureg = UnitRegistry()
a = np.random.random((100, 100, 100))
a[a < 0.8] = 0
s = sparse.COO(a) # convert to sparse array
d = da.from_array(a, chunks=(100, 1, 1))
q = a * ureg("m/s^2")
dims = ('x', 'y', 'z')
coords = {dim: np.arange(100) for dim in dims}
x = xr.DataArray(a, dims=dims, coords=coords)
s
Format | coo |
---|---|
Data Type | float64 |
Shape | (100, 100, 100) |
nnz | 200138 |
Density | 0.200138 |
Read-only | True |
Size | 6.1M |
Storage ratio | 0.8 |
d
|
q
Magnitude | [[[0.0 0.0 0.0 ... 0.0 0.8164393236725807 0.0] |
---|---|
Units | meter/second2 |
x
<xarray.DataArray (x: 100, y: 100, z: 100)> array([[[0. , 0. , 0. , ..., 0. , 0.81643932, 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0.93490924], [0. , 0. , 0. , ..., 0.95114501, 0. , 0.84600871], ..., [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0.92187838, 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ]], [[0.8759675 , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0.90322255], [0. , 0. , 0. , ..., 0. , 0. , 0. ], ... [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0.91097034, 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0.99243301]], [[0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0.99117338, 0. , 0. ], ..., [0.91487296, 0. , 0. , ..., 0. , 0. , 0. ], [0.97311397, 0. , 0. , ..., 0. , 0. , 0.90673723], [0. , 0.92772936, 0. , ..., 0. , 0. , 0. ]]]) Coordinates: * x (x) int64 0 1 2 3 4 5 6 7 8 9 10 ... 90 91 92 93 94 95 96 97 98 99 * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 ... 90 91 92 93 94 95 96 97 98 99 * z (z) int64 0 1 2 3 4 5 6 7 8 9 10 ... 90 91 92 93 94 95 96 97 98 99
array([[[0. , 0. , 0. , ..., 0. , 0.81643932, 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0.93490924], [0. , 0. , 0. , ..., 0.95114501, 0. , 0.84600871], ..., [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0.92187838, 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ]], [[0.8759675 , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0.90322255], [0. , 0. , 0. , ..., 0. , 0. , 0. ], ... [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0.91097034, 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0.99243301]], [[0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0.99117338, 0. , 0. ], ..., [0.91487296, 0. , 0. , ..., 0. , 0. , 0. ], [0.97311397, 0. , 0. , ..., 0. , 0. , 0.90673723], [0. , 0.92772936, 0. , ..., 0. , 0. , 0. ]]])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
# Now combinations!
q_d = ureg.Quantity(d, 'm/s^2')
x_q = xr.DataArray(q, dims=dims, coords=coords)
x_q_d_s = xr.DataArray(
ureg.Quantity(
da.from_array(s),
'm/s^2'
),
dims=dims,
coords=coords
)
q_d
Magnitude |
| |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Units | meter/second2 |
x_q
<xarray.DataArray (x: 100, y: 100, z: 100)> <Quantity([[[0. 0. 0. ... 0. 0.81643932 0. ] [0. 0. 0. ... 0. 0. 0.93490924] [0. 0. 0. ... 0.95114501 0. 0.84600871] ... [0. 0. 0. ... 0. 0. 0. ] [0. 0.92187838 0. ... 0. 0. 0. ] [0. 0. 0. ... 0. 0. 0. ]] [[0.8759675 0. 0. ... 0. 0. 0. ] [0. 0. 0. ... 0. 0. 0.90322255] [0. 0. 0. ... 0. 0. 0. ] ... [0.86093744 0. 0.87457853 ... 0. 0. 0. ] [0. 0. 0. ... 0. 0. 0. ] [0. 0. 0. ... 0. 0.87173636 0. ]] [[0. 0. 0. ... 0. 0. 0. ] [0. 0.85404788 0. ... 0. 0. 0.95820373] [0. 0. 0. ... 0. 0. 0. ] ... ... ... [0. 0.91454125 0. ... 0. 0. 0.95000281] [0. 0. 0. ... 0. 0.87192639 0.92644691] [0. 0. 0. ... 0. 0. 0. ]] [[0.83639078 0.87825136 0. ... 0. 0. 0. ] [0. 0. 0. ... 0. 0. 0.82706601] [0. 0. 0. ... 0. 0.87050233 0. ] ... [0. 0. 0. ... 0. 0. 0. ] [0. 0. 0. ... 0. 0.91097034 0. ] [0. 0. 0. ... 0. 0. 0.99243301]] [[0. 0. 0. ... 0. 0. 0. ] [0. 0. 0. ... 0. 0. 0. ] [0. 0. 0. ... 0.99117338 0. 0. ] ... [0.91487296 0. 0. ... 0. 0. 0. ] [0.97311397 0. 0. ... 0. 0. 0.90673723] [0. 0.92772936 0. ... 0. 0. 0. ]]], 'meter / second ** 2')> Coordinates: * x (x) int64 0 1 2 3 4 5 6 7 8 9 10 ... 90 91 92 93 94 95 96 97 98 99 * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 ... 90 91 92 93 94 95 96 97 98 99 * z (z) int64 0 1 2 3 4 5 6 7 8 9 10 ... 90 91 92 93 94 95 96 97 98 99
Magnitude | [[[0.0 0.0 0.0 ... 0.0 0.8164393236725807 0.0] |
---|---|
Units | meter/second2 |
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
x_q_d_s
<xarray.DataArray 'array-90ad3f4c8f39ebaece4f3bdfc729f1e6' (x: 100, y: 100, z: 100)> <Quantity(dask.array<array, shape=(100, 100, 100), dtype=float64, chunksize=(100, 100, 100), chunktype=sparse.COO>, 'meter / second ** 2')> Coordinates: * x (x) int64 0 1 2 3 4 5 6 7 8 9 10 ... 90 91 92 93 94 95 96 97 98 99 * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 ... 90 91 92 93 94 95 96 97 98 99 * z (z) int64 0 1 2 3 4 5 6 7 8 9 10 ... 90 91 92 93 94 95 96 97 98 99
Magnitude |
| ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Units | meter/second2 |
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
a = np.random.random((2, 2))
q = a * ureg.s
x_q = xr.DataArray(q, dims=('x', 'y'))
q
Magnitude | [[0.5588875868917845 0.5514644183758584] |
---|---|
Units | second |
x_q
<xarray.DataArray (x: 2, y: 2)> <Quantity([[0.55888759 0.55146442] [0.78191453 0.69634835]], 'second')> Dimensions without coordinates: x, y
Magnitude | [[0.5588875868917845 0.5514644183758584] |
---|---|
Units | second |
q[0, 0]
x_q[0, 0]
<xarray.DataArray ()> <Quantity(0.5588875868917845, 'second')>
0.5588875868917845second