如何有效地将变换应用于多通道numpy ndarray?

时间:2017-06-05 23:10:02

标签: python numpy

我有三个数据通道。通道代表x,y和z坐标。例如,点的x位置存储在通道1中,y位置存储在通道2等中

我想对这些频道中表示的每个点执行转换。也就是说,我想通过变换矩阵在每个u,v位置乘以x,y和z。当然,我可以手动迭代每个u,v位置并提取位置数据。我觉得这不是最有效的方法。

我的问题是,转换点集合的最有效方法是什么,其中位置数据存储在与每个维度相对应的通道中?

1 个答案:

答案 0 :(得分:1)

您所描述的仅仅是矩阵乘法:

raw = numpy.array([ [1, 10, 100], [2, 20, 200], [3, 30, 300], [4, 40, 400] ])
transformation = numpy.matrix([ [1, 0, 0], [0, 0, 1], [0, -1, 0] ])
transformed = raw * transformation

也许您的数据比M-datapoints-by-3-“channel”更高维?目前还不清楚你的意思是uv,但他们有点暗示你的问题可能是更高维度的。如果是这样,您可以调查numpy.tensordotnumpy.einsum,以便将矩阵乘法推广到更高维度,或者您可以将raw设置为实际原始数据的view然后你reshape下到M-by-3(最后通过重新设置transformed以你想要的方式重新取消它。)