예제 #1
0
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)
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
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
예제 #6
0
파일: dpnp_array.py 프로젝트: densmirn/dpnp
 def __rmatmul__(self, other):
     return dpnp.matmul(other, self)
예제 #7
0
파일: dpnp_array.py 프로젝트: densmirn/dpnp
 def __matmul__(self, other):
     return dpnp.matmul(self, other)