def test_tensorgrid_points(): vec1 = np.array([2, 3, 4, 5]) vec2 = np.array([-4, -2, 0, 2, 4]) scalar = 0.5 # C ordering points = [] for x1 in vec1: for x2 in vec2: points.append(np.array((x1, x2), dtype=float)) grid = TensorGrid(vec1, vec2) assert all_equal(points, grid.points()) assert all_equal(points, grid.points(order='C')) assert all_equal(grid.min_pt, grid.points()[0]) assert all_equal(grid.max_pt, grid.points()[-1]) # F ordering points = [] for x2 in vec2: for x1 in vec1: points.append(np.array((x1, x2), dtype=float)) grid = TensorGrid(vec1, vec2) assert all_equal(points, grid.points(order='F')) # Degenerate axis 1 points = [] for x1 in vec1: for x2 in vec2: points.append(np.array((scalar, x1, x2), dtype=float)) grid = TensorGrid(scalar, vec1, vec2) assert all_equal(points, grid.points()) # Degenerate axis 2 points = [] for x1 in vec1: for x2 in vec2: points.append(np.array((x1, scalar, x2), dtype=float)) grid = TensorGrid(vec1, scalar, vec2) assert all_equal(points, grid.points()) # Degenerate axis 3 points = [] for x1 in vec1: for x2 in vec2: points.append(np.array((x1, x2, scalar), dtype=float)) grid = TensorGrid(vec1, vec2, scalar) assert all_equal(points, grid.points()) # Bad input with pytest.raises(ValueError): grid.points(order='A')
def test_points(as_midp): vec1 = np.arange(2, 6) vec2 = np.arange(-4, 5, 2) scalar = 0.5 # C ordering points = [] for x1 in vec1: for x2 in vec2: points.append(np.array((x1, x2), dtype=float)) grid = TensorGrid(vec1, vec2, as_midp=as_midp) assert all_equal(points, grid.points()) assert all_equal(points, grid.points(order='C')) assert all_equal(grid.min_pt, grid.points()[0]) assert all_equal(grid.max_pt, grid.points()[-1]) # F ordering points = [] for x2 in vec2: for x1 in vec1: points.append(np.array((x1, x2), dtype=float)) grid = TensorGrid(vec1, vec2, as_midp=as_midp) assert all_equal(points, grid.points(order='F')) # Degenerate axis 1 points = [] for x1 in vec1: for x2 in vec2: points.append(np.array((scalar, x1, x2), dtype=float)) grid = TensorGrid(scalar, vec1, vec2, as_midp=as_midp) assert all_equal(points, grid.points()) # Degenerate axis 2 points = [] for x1 in vec1: for x2 in vec2: points.append(np.array((x1, scalar, x2), dtype=float)) grid = TensorGrid(vec1, scalar, vec2, as_midp=as_midp) assert all_equal(points, grid.points()) # Degenerate axis 3 points = [] for x1 in vec1: for x2 in vec2: points.append(np.array((x1, x2, scalar), dtype=float)) grid = TensorGrid(vec1, vec2, scalar, as_midp=as_midp) assert all_equal(points, grid.points())
def corners(self, order='C'): """The corner points in a single array. Parameters ---------- order : {'C', 'F'} The ordering of the axes in which the corners appear in the output. 'C' means that the first axis varies slowest and the last one fastest, vice versa in 'F' ordering. Returns ------- corners : `numpy.ndarray` The size of the array is ``2^m * ndim``, where ``m`` is the number of non-degenerate axes, i.e. the corners are stored as rows. Examples -------- >>> rbox = IntervalProd([-1, 2, 0], [-0.5, 3, 0.5]) >>> rbox.corners() array([[-1. , 2. , 0. ], [-1. , 2. , 0.5], [-1. , 3. , 0. ], [-1. , 3. , 0.5], [-0.5, 2. , 0. ], [-0.5, 2. , 0.5], [-0.5, 3. , 0. ], [-0.5, 3. , 0.5]]) >>> rbox.corners(order='F') array([[-1. , 2. , 0. ], [-0.5, 2. , 0. ], [-1. , 3. , 0. ], [-0.5, 3. , 0. ], [-1. , 2. , 0.5], [-0.5, 2. , 0.5], [-1. , 3. , 0.5], [-0.5, 3. , 0.5]]) """ from odl.discr.grid import TensorGrid if order not in ('C', 'F'): raise ValueError('order {} not understood.'.format(order)) minmax_vecs = [0] * self.ndim for axis in self._ideg: minmax_vecs[axis] = self.begin[axis] for axis in self._inondeg: minmax_vecs[axis] = (self.begin[axis], self.end[axis]) minmax_grid = TensorGrid(*minmax_vecs) return minmax_grid.points(order=order)
def corners(self, order='C'): """Return the corner points as a single array. Parameters ---------- order : {'C', 'F'}, optional Ordering of the axes in which the corners appear in the output. ``'C'`` means that the first axis varies slowest and the last one fastest, vice versa in ``'F'`` ordering. Returns ------- corners : `numpy.ndarray` Array containing the corner coordinates. The size of the array is ``2^m x ndim``, where ``m`` is the number of non-degenerate axes, i.e. the corners are stored as rows. Examples -------- >>> rbox = IntervalProd([-1, 2, 0], [-0.5, 3, 0.5]) >>> rbox.corners() array([[-1. , 2. , 0. ], [-1. , 2. , 0.5], [-1. , 3. , 0. ], [-1. , 3. , 0.5], [-0.5, 2. , 0. ], [-0.5, 2. , 0.5], [-0.5, 3. , 0. ], [-0.5, 3. , 0.5]]) >>> rbox.corners(order='F') array([[-1. , 2. , 0. ], [-0.5, 2. , 0. ], [-1. , 3. , 0. ], [-0.5, 3. , 0. ], [-1. , 2. , 0.5], [-0.5, 2. , 0.5], [-1. , 3. , 0.5], [-0.5, 3. , 0.5]]) """ from odl.discr.grid import TensorGrid minmax_vecs = [0] * self.ndim for axis in self.ideg: minmax_vecs[axis] = self.min_pt[axis] for axis in self.inondeg: minmax_vecs[axis] = (self.min_pt[axis], self.max_pt[axis]) minmax_grid = TensorGrid(*minmax_vecs) return minmax_grid.points(order=order)
def corners(self, order='C'): """The corner points in a single array. Parameters ---------- order : {'C', 'F'} The ordering of the axes in which the corners appear in the output. 'C' means that the first axis varies slowest and the last one fastest, vice versa in 'F' ordering. Returns ------- corners : `numpy.ndarray` The size of the array is ``2^m * ndim``, where ``m`` is the number of non-degenerate axes, i.e. the corners are stored as rows. Examples -------- >>> rbox = IntervalProd([-1, 2, 0], [-0.5, 3, 0.5]) >>> rbox.corners() array([[-1. , 2. , 0. ], [-1. , 2. , 0.5], [-1. , 3. , 0. ], [-1. , 3. , 0.5], [-0.5, 2. , 0. ], [-0.5, 2. , 0.5], [-0.5, 3. , 0. ], [-0.5, 3. , 0.5]]) >>> rbox.corners(order='F') array([[-1. , 2. , 0. ], [-0.5, 2. , 0. ], [-1. , 3. , 0. ], [-0.5, 3. , 0. ], [-1. , 2. , 0.5], [-0.5, 2. , 0.5], [-1. , 3. , 0.5], [-0.5, 3. , 0.5]]) """ from odl.discr.grid import TensorGrid minmax_vecs = [0] * self.ndim for axis in self._ideg: minmax_vecs[axis] = self.begin[axis] for axis in self._inondeg: minmax_vecs[axis] = (self.begin[axis], self.end[axis]) minmax_grid = TensorGrid(*minmax_vecs) return minmax_grid.points(order=order)