def test_constructor(self): mat = np.arange(20).reshape(4, 5) dat = RegularDataArray(mat, delta=[3, 5], coord_min=[6, 1], dims=('mydim_x', 'mydim_y')) assert dat.dims == ('mydim_x', 'mydim_y') dat_cr = dat.sel({'mydim_x': slice(8, 13), 'mydim_y': slice(5, 17)}) dat = RegularDataArray(dat_cr) assert np.all(dat_cr.values == dat.values)
def test_numpy_1d(self): # 1D Tests x = np.arange(9) y = RegularDataArray(x) assert len(y.delta) == 1 assert y.delta[0] == 1 assert y.coord_min[0] == 0 y = RegularDataArray(x, axes=[3*np.arange(9) + 3]) assert y.delta[0] == 3 assert y.offset[0] == 3
def test_numpy_2d(self): # 2D Tests mat = np.arange(20).reshape(4, 5) dat = RegularDataArray(mat, delta=[3, 5], coord_min=[6, 1]) assert dat.dims == ('x', 'y') dat_cr = dat.sel({'x': slice(8, 13), 'y': slice(5, 17)}) assert np.all(dat_cr.values == np.array([[6, 7, 8], [11, 12, 13]])) assert dat_cr.offset[0] == 9 assert dat_cr.delta[0] == 3 dat_cr = dat.isel({'x': slice(0, 3), 'y': slice(0, 2)}) assert np.all(dat_cr.values == np.array([[0, 1], [5, 6], [10, 11]]))
def test_sel(self): mat = np.arange(20).reshape(4, 5) dat = RegularDataArray(mat, delta=[3, 5], coord_min=[6, 1]) dat_cr = dat.sel(slice(8, 13), slice(5, 17)) assert np.allclose(dat_cr.values, mat[1:3, 1:4]) assert dat_cr.coord_min[0] == pytest.approx(9) assert dat_cr.coord_min[1] == pytest.approx(6) assert dat_cr.coord_max[0] == pytest.approx(12) assert dat_cr.coord_max[1] == pytest.approx(16) assert np.allclose(dat_cr.axes[0], np.arange(2) * 3 + 9) assert np.allclose(dat_cr.axes[1], np.arange(3) * 5 + 6) dat_cr = dat.sel(slice(-5, 7), slice(24, 100)) assert np.allclose(dat_cr.values, mat[0, -1].reshape(1, 1))
def test_numpy_1d(self): # 1D Tests x = np.arange(9) y = RegularDataArray(x) assert len(y.delta) == 1 assert y.delta[0] == 1 assert y.coord_min[0] == 0 y = RegularDataArray(x, delta=[3], coord_min=[3]) assert y.delta[0] == 3 assert y.offset[0] == 3 assert np.allclose(y.axes[0], np.arange(9) * 3 + 3) y = RegularDataArray(x, coord_min=10, delta=-5) assert y.delta[0] == pytest.approx(5) assert y.coord_min[0] == pytest.approx(-30) assert np.allclose(y.axes[0], np.arange(9) * 5 - 30) assert np.allclose(y.values, x[::-1])
def make_regular_data(): # Generate data mat = np.array([[[9, 1], [2, 3]], [[5, 5], [1, 1]], [[1, 1], [0, 0]], [[3, 2], [1, 8]]]) delta = [2, 5, 7] coord_min = [0, 1, 2] return RegularDataArray(mat, dims=('x4', 'y2', 'z2'), delta=delta, coord_min=coord_min)
def test_isel(self): mat = np.arange(20).reshape(4, 5) dat = RegularDataArray(mat, delta=[3, 5], coord_min=[6, 1]) dat_cr = dat.isel(slice(1, 3), slice(1, 4)) assert np.allclose(dat_cr.values, mat[1:3, 1:4]) assert dat_cr.coord_min[0] == pytest.approx(9) assert dat_cr.coord_min[1] == pytest.approx(6) assert dat_cr.coord_max[0] == pytest.approx(12) assert dat_cr.coord_max[1] == pytest.approx(16) assert np.allclose(dat_cr.axes[0], np.arange(2) * 3 + 9) assert np.allclose(dat_cr.axes[1], np.arange(3) * 5 + 6) dat_cr = dat.isel(0, None) assert np.allclose(dat_cr.values, mat[0, :].reshape(1, -1)) dat_cr = dat.isel(-1, slice(None)) assert np.allclose(dat_cr.values, mat[-1, :].reshape(1, -1)) dat_cr = dat.isel(slice(None), 0) assert np.allclose(dat_cr.values, mat[:, 0].reshape(-1, 1)) dat_cr = dat.isel(slice(None), -1) assert np.allclose(dat_cr.values, mat[:, -1].reshape(-1, 1)) dat_cr = dat.isel(slice(-2, -1), slice(None)) assert np.allclose(dat_cr.values, mat[-2:-1, :].reshape(1, -1))
def from_file(): import h5py f = h5py.File(r'Mn1610_02_00034.h5', 'r') counts = np.array(f['data']['counts']) exposure = np.array(f['data']['exposure']) counts[exposure <= 0] = 0 dat_mat = counts dat_mat[exposure > 0] /= exposure[exposure > 0] dat_mat[np.isnan(dat_mat)] = 0 delta = [ f['data'][axis].attrs['delta'] for axis in ['axis0', 'axis1', 'axis2'] ] coord_min = [ f['data'][axis].attrs['offset'] for axis in ['axis0', 'axis1', 'axis2'] ] f.close() mydata = RegularDataArray(dat_mat, delta=delta, coord_min=coord_min) return mydata
def test_numpy_2d(self): # 2D Tests mat = np.arange(20).reshape(4, 5) dat = RegularDataArray(mat, delta=[3, 5], coord_min=[6, 1]) assert dat.dims == ('x', 'y') assert np.allclose(dat.axes[0], np.arange(4) * 3 + 6) assert np.allclose(dat.axes[1], np.arange(5) * 5 + 1) dat_cr = dat.sel(slice(8, 13), slice(5, 17)) assert np.allclose(dat_cr.values, np.array([[6, 7, 8], [11, 12, 13]])) assert dat_cr.offset[0] == 9 assert dat_cr.delta[0] == 3 dat_cr = dat.isel(slice(0, 3), slice(0, 2)) assert np.allclose(dat_cr.values, np.array([[0, 1], [5, 6], [10, 11]])) dat = RegularDataArray(mat, delta=[-3, 5], coord_min=[12, 1]) assert np.allclose(dat.axes[0], np.arange(4) * 3 + 3) assert np.allclose(dat.values, mat[::-1, :])
def gen_data(): # Generate data mat = np.array([[[0, 1], [2, 3]], [[0, 0], [1, 1]], [[1, 1], [0, 0]], [[3, 2], [1, 0]]]) axes = None return RegularDataArray.from_numpy_array(mat, axes=axes)
def make_5d(): mat = np.arange(3*4*5*6*7*8).reshape((3, 4, 5, 6, 7, 8)) dat = RegularDataArray(mat, delta=[2, 3, 4, 5, 6, 7], coord_min=[-1, -2, -3, -4, -5, -6]) return dat
def make_2d(): mat = np.arange(20).reshape(4, 5) dat = RegularDataArray(mat, delta=[3, 5], coord_min=[6, 1]) return dat