我想编写一个函数SumThree
,该函数接收大小为(n x (n+2))
的矩阵作为一个numpy数组,并返回一个以下列方式定义的向量v
:{{1} }。
限制: 否循环,您不能使用功能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)
答案 0 :(得分:1)
您可以使用numpy.diagonal
获得特定的对角线(具有所需的偏移量)能否请您尝试一下,看看它是否对您有用?
import pymongo
from pymongo import MongoClient
db_name = 'student_db'
client = MongoClient('localhost', 27017)
db_obj = client[db_name]
collection=db_obj['mongo_app_student']
@api_view(['GET'])
def testin(request):
data=request.data
for x in collection.find():
if data in x.values():
print('entered a right value')
return Response(data)
这是一个完整的示例:
def sumThree(a):
return a.diagonal(offset=0) + a.diagonal(offset=1) + a.diagonal(offset=2)
它输出:
import numpy as np
def sumThree(a):
return a.diagonal(offset=0) + a.diagonal(offset=1) + a.diagonal(offset=2)
my_arr = np.arange(48).reshape(6,8)
print(my_arr)
print("\n\n\n")
print(sumThree(my_arr))