将矩阵的每一行中的三个元素相加-无循环

时间:2019-06-16 10:09:36

标签: python arrays matrix

我想编写一个函数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)

1 个答案:

答案 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))