def matrix_power(input, count): """ Raise a square matrix to the (integer) power `count`. Parameters ---------- input : sequence of array_like Returns ------- output : array Returns the dot product of the supplied arrays. See Also -------- :obj:`numpy.linalg.matrix_power` """ if not use_origin_backend() and count > 0: result = input for id in range(count - 1): result = dpnp.matmul(result, input) return result return call_origin(numpy.linalg.matrix_power, input, count)
def test_matmul3(self): array_data1 = numpy.full((513, 513), 5) array_data2 = numpy.full((513, 513), 2) out = numpy.empty((513, 513), dtype=numpy.float64) # DPNP array1 = inp.array(array_data1, dtype=inp.float64) array2 = inp.array(array_data2, dtype=inp.float64) out1 = inp.array(out, dtype=inp.float64) result = inp.matmul(array1, array2, out=out1) # original array_1 = numpy.array(array_data1, dtype=numpy.float64) array_2 = numpy.array(array_data2, dtype=numpy.float64) expected = numpy.matmul(array_1, array_2, out=out) numpy.testing.assert_array_equal(expected, result)
def test_matmul2(self): array_data1 = [1., 2., 3., 4., 5., 6.] array_data2 = [1., 2., 3., 4., 5., 6., 7., 8.] # DPNP array1 = inp.reshape(inp.array(array_data1, dtype=inp.float64), (3, 2)) array2 = inp.reshape(inp.array(array_data2, dtype=inp.float64), (2, 4)) result = inp.matmul(array1, array2) # print(result) # original array_1 = numpy.array(array_data1, dtype=numpy.float64).reshape((3, 2)) array_2 = numpy.array(array_data2, dtype=numpy.float64).reshape((2, 4)) expected = numpy.matmul(array_1, array_2) # print(expected) numpy.testing.assert_array_equal(expected, result)
def test_matmul(self): array_data = [1., 2., 3., 4.] size = 2 # DPNP array1 = inp.array(array_data, dtype=inp.float64).reshape((size, size)) array2 = inp.array(array_data, dtype=inp.float64).reshape((size, size)) result = inp.matmul(array1, array2) # print(result) # original array_1 = numpy.array(array_data, dtype=numpy.float64).reshape((size, size)) array_2 = numpy.array(array_data, dtype=numpy.float64).reshape((size, size)) expected = numpy.matmul(array_1, array_2) # print(expected) # passed numpy.testing.assert_array_equal(expected, result)
def matrix_power(input, count): """ Raise a square matrix to the (integer) power `count`. Parameters ---------- input : sequence of array_like Returns ------- output : dparray Returns the dot product of the supplied arrays. See Also -------- :obj:`numpy.linalg.matrix_power` """ is_input_dparray = isinstance(input, dparray) if not use_origin_backend(input) and is_input_dparray and count > 0: result = input for id in range(count - 1): result = dpnp.matmul(result, input) return result input1 = dpnp.asnumpy(input) if is_input_dparray else input # TODO need to put dparray memory into NumPy call result_numpy = numpy.linalg.matrix_power(input1, count) result = result_numpy if isinstance(result, numpy.ndarray): result = dparray(result_numpy.shape, dtype=result_numpy.dtype) for i in range(result.size): result._setitem_scalar(i, result_numpy.item(i)) return result
def __rmatmul__(self, other): return dpnp.matmul(other, self)
def __matmul__(self, other): return dpnp.matmul(self, other)