如何旋转numpy数组?

1 投票
3 回答
2964 浏览
提问于 2025-04-16 22:51

我遇到了一些关于numpy和scipy的问题。我有一个三维数组,它以二进制的方式表示一个椭球体,里面的值是0表示不在椭球体内。现在我想把这个形状旋转一定的角度。你觉得这可能吗?或者有没有更有效的方法可以直接写出带旋转的椭球体方程?

3 个回答

0

用非矩形的角度旋转是比较麻烦的,因为旋转后的正方形就不再适合放在原来的矩阵里了。

最简单的方法是通过以下方式转置一个二维数组/矩阵:

import numpy as np
... x = np.array([[1,2,3],[4,5,6],[7,8,9]])
x
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

x.T      # transpose the array

array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

如果你需要明确的数组旋转,可以查看 scipy库中的ndimage包

from scipy import ndimage, datasets
img = datasets.ascent()
img_45 = ndimage.rotate(img, 45, reshape=False)
1

看看这个命令 numpy.shape。我曾经用它来转置一个数组,但我不确定它是否适合你的需求。祝好运!

2

我来简单回答一下。如果你需要更多信息或者不知道怎么做,我可以再补充一些例子。

要旋转你的数据点矩阵,正确的方法是进行矩阵乘法。你的旋转矩阵可能是一个n*n的矩阵,你需要把它和每个点相乘。如果你有一个三维矩阵,可能会有类似于i*j*k-点的东西用于绘图。这意味着在你的情况下,你需要进行i*j*k次操作来找到新的点。也许你可以考虑使用另一个矩阵来绘图,这个矩阵只是一个二维矩阵,只存储绘图点,而不存储零值。

有一些算法可以更快地计算低值矩阵的结果,不过你可以自己去网上查查。

你明白我的意思了吗?还是有其他问题?抱歉我只给了个大概。

祝好

撰写回答