有没有比这个列表理解更简单的 Numpy 数组广播表达式?
Is there a Numpy array broadcasting expression simpler than this list comprehension?
在此代码段中:
triangles = np.float32([[[0, -2], [-2, 3], [1, 1]], [[0, -1], [-1, 3], [1, 1]]])
centers = np.average(triangles, axis=1)
samples = np.float32([t-centers[i] for i, t in enumerate(triangles)])
我想将 samples
表示为数组广播减法,即类似于 triangles-centers
的内容,但由于以下原因不起作用:
ValueError: operands could not be broadcast together with shapes (2,3,2) (2,2)
有没有比列表理解更简单的定义 samples
的方法?
我相信这可以满足您的需求。只需重塑中心以匹配行大小。
samples = triangles - centers.reshape(triangles.shape[0],-1,triangles.shape[2])
将 numpy.mean
与 keepdims=True
结合使用,以在您采用平均值的轴上保持长度为 1 的维度:
samples = triangles - np.mean(triangles, axis=1, keepdims=True)
受@Tim Roberts 上述回答的启发:
triangles = np.float32([[[0, -2], [-2, 3], [1, 1]], [[0, -1], [-1, 3], [1, 1]]])
centers = np.average(triangles, axis=1)
samples = triangles-centers[:, None, :]
在此代码段中:
triangles = np.float32([[[0, -2], [-2, 3], [1, 1]], [[0, -1], [-1, 3], [1, 1]]])
centers = np.average(triangles, axis=1)
samples = np.float32([t-centers[i] for i, t in enumerate(triangles)])
我想将 samples
表示为数组广播减法,即类似于 triangles-centers
的内容,但由于以下原因不起作用:
ValueError: operands could not be broadcast together with shapes (2,3,2) (2,2)
有没有比列表理解更简单的定义 samples
的方法?
我相信这可以满足您的需求。只需重塑中心以匹配行大小。
samples = triangles - centers.reshape(triangles.shape[0],-1,triangles.shape[2])
将 numpy.mean
与 keepdims=True
结合使用,以在您采用平均值的轴上保持长度为 1 的维度:
samples = triangles - np.mean(triangles, axis=1, keepdims=True)
受@Tim Roberts 上述回答的启发:
triangles = np.float32([[[0, -2], [-2, 3], [1, 1]], [[0, -1], [-1, 3], [1, 1]]])
centers = np.average(triangles, axis=1)
samples = triangles-centers[:, None, :]