我想写一个函数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.diagonal获得特定的对角线(具有所需的偏移量)
你能试试这个,看看对你有用吗?你知道吗
下面是一个完整的示例:
它输出:
相关问题 更多 >
编程相关推荐