Python 以向量作为numpy中的条目迭代矩阵的最快方法
我正在使用python的opencv库中的一个函数来获取手在移动时的光流运动。具体地 此函数输出一个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)),
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参数,但除此之外,它是有意义的