【发布时间】:2019-06-16 10:09:36
【问题描述】:
我想写一个函数SumThree,它接收一个大小为(n x (n+2))的矩阵作为一个numpy数组,并返回一个向量v,它的定义方式如下:v[i] = A[i,i] + A[i,i+1] + A[i,i+2]。
限制: 没有循环,你不能使用函数sum (np.sum)
我确实通过使用递归和更改函数的签名(它应该只接收矩阵)来解决它。但我正在寻找一种更简单、更有效的解决方案。
类似这样的东西(这是我尝试过的):
def sumThree(array, curr=0, i=0, v=[]):
if curr < array.size
curr += array.shape[1]
else
return v
count = array.size
v[i] = array[curr,curr] + array[curr,curr+1] + array[curr,curr+2]
sumThree(array, curr, i+1, v)
我还没有尝试过,但我认为这应该可行:
def sumThree(a):
return (a.diagonal() + a.diagonal(1) + a.diagonal(2))
【问题讨论】:
-
你被要求不使用循环的原因是你可以使用 numpy 向量化。递归不是解决这个问题的正确方法。
-
@rdas 是的,你是对的,我正在尝试使用一些 numpy 函数。我认为
diagonal()应该解决这个问题。参考:docs.scipy.org/doc/numpy/reference/generated/…