Python矩阵内积

时间:2017-07-07 19:21:43

标签: python python-2.7 numpy inner-product

我正在尝试解决以下问题:

'''
        Take in two matrices as numpy arrays, X and Y. Determine whether they have an inner product.
        If they do not, return False. If they do, return the resultant matrix as a numpy array.
        '''

使用以下代码:

def mat_inner_product(X,Y):

    if X.shape != Y.shape:
        return False
    else:
        return np.inner(X,Y)

我收到以下错误消息:

.F
======================================================================
FAIL: test_mat_inner_product (test_methods.TestPython1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/src/app/test_methods.py", line 27, in test_mat_inner_product
    self.assertTrue(np.array_equal(result2, correct2))
AssertionError: False is not true

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

这是什么意思"错误不是真的"?我有逻辑错误吗?或者我应该使用.dot()而不是.inner()?有什么区别?

1 个答案:

答案 0 :(得分:4)

可以计算内积,因为两个矩阵的最后一个维度相同。因此,您不应该检查X.shape是否等于Y.shape,而只检查最后一个维度:

def mat_inner_product(X,Y):
    if X.shape[-1] != Y.shape[-1]:
        return False
    else:
        return np.inner(X,Y)

此外,维度的数量 - .ndimlen(X.shape) - 也不必相同:您可以使用3d张量计算二维矩阵的内积。< / p>

但您可以省略该检查并使用try - except项:

def mat_inner_product(X,Y):
    try:
        return np.inner(X,Y)
    except ValueError:
        return False

现在我们只需要依赖numpy已正确实现内部矩阵逻辑的事实,并且在内部产品无法计算的情况下将引发ValueError

  

或者我应该使用.dot()而不是.inner()?有什么区别?

点积的不同之处在于它与Y倒数第二维度(而不是np.inner()中使用的最后一维)一起使用。因此,如果您使用numpy.dot(..),检查将是:

def mat_dot_product(X,Y):
    if X.shape[-1] != Y.shape[-2]:
        return False
    else:
        return np.dot(X,Y)

但同样,您可以在此处使用try - except结构。