Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以向量作为numpy中的条目迭代矩阵的最快方法_Python_Opencv_Numpy - Fatal编程技术网

Python 以向量作为numpy中的条目迭代矩阵的最快方法

Python 以向量作为numpy中的条目迭代矩阵的最快方法,python,opencv,numpy,Python,Opencv,Numpy,我正在使用python的opencv库中的一个函数来获取手在移动时的光流运动。具体地 此函数输出一个numpy数组 flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0) print flow.shape # prints (480,320,2) 所以流是一个矩阵,每个条目都是一个向量。我想要一种量化这个矩阵的方法,所以我想使用L1矩阵范数(numpy.linalg.norm(flow,1)),

我正在使用python的opencv库中的一个函数来获取手在移动时的光流运动。具体地

此函数输出一个numpy数组

flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0)
print flow.shape # prints (480,320,2)
所以流是一个矩阵,每个条目都是一个向量。我想要一种量化这个矩阵的方法,所以我想使用L1矩阵范数(numpy.linalg.norm(flow,1)),这会给范数误差带来不正确的维数

我想通过计算每个向量的欧几里德范数,然后用向量的距离找到矩阵的L1范数,来解决这个问题

我无法有效地迭代流矩阵。我使用了两个for循环,首先遍历列,然后遍历行,但速度太慢了

            r,c,d = flow.shape 
            flowprime = numpy.zeros((r,c),flow.dtype)
            for i in range(0,r):
                for j in range (0,c):
                    flowprime[i,j] = numpy.linalg.norm(flow[i,j], 2)
            print(numpy.linalg.norm(flowprime, 1))
我也尝试过使用numpy.nditer,但是

for x in numpy.nditer(flow, op_flags=['readwrite']):
   print x
只打印一个值而不是一个向量


什么是迭代以向量作为条目的numpy矩阵、对它们进行范数化然后采用L1范数的最快方法?

从numpy版本1.9开始,
norm
采用一个
参数


除此之外,说出你理想的想法,几乎可以肯定你可以要求
numpy
去做。例如,假设没有复杂的条目或缺少值,最简单的情况是
np.sqrt((flow**2.sum())
或者我认为您描述的
np.linalg.norm(np.sqrt((flow**2.sum)(axis=-1)),1)

嘿,谢谢,今晚晚些时候我必须研究axis=-1参数,但除此之外,它是有意义的