繁体   English   中英

在python中将数组的一小部分旋转90度

[英]rotate small portion of an array by 90 degree in python

我想旋转一个数组,但不希望整体旋转,仅旋转其中的一小部分。 我有512X512数组(基本上是中心(150,150)的高斯圆,半径为200)。 现在,我只想将阵列的一小部分(半径为100的中心(150,150)围绕中心)旋转90度。 最初,我使用numpy rot90模块,但是它旋转每个我不需要的数组元素。 我将感谢您的任何反馈。

谢谢

-病毒

如果可以使用高级索引描述要旋转的元素,则应该能够使用类似以下的内容执行旋转(假设您的数组称为arr ):

arr[rs:re,cs:ce] = np.rot90(np.copy(arr[rs:re,cs:ce]))

在这里, rsrecsce表示片的行开始和行结束,以及片的列开始和列结束。

这是为什么需要np.copy调用的示例(至少在numpy 1.3.0中):

>>> import numpy as np
>>> m = np.array([[i]*4 for i in range(4)])
>>> m
array([[0, 0, 0, 0],
       [1, 1, 1, 1],
       [2, 2, 2, 2],
       [3, 3, 3, 3]])
>>> m[1:3,1:3] = np.rot90(m[1:3,1:3])     # rotate middle 2x2
>>> m
array([[0, 0, 0, 0],
       [1, 1, 2, 1],     # got  1, 2  expected  1, 2  
       [2, 1, 1, 2],     #      1, 1            1, 2
       [3, 3, 3, 3]])

这是FJ已经解释过的更完整的代码。

在此处输入图片说明

这是代码:

import numpy as np
import scipy

def circle(im, centre_x, centre_y, radius):
    grid_x, grid_y = np.mgrid[0:im.shape[0],0:im.shape[1]]
    return (grid_x-centre_x)**2 + (grid_y-centre_y)**2 < radius**2

centre_x, centre_y, radius = 150, 200, 100
x_slice = slice(centre_x - radius, centre_x + radius)
y_slice = slice(centre_y - radius, centre_y + radius)

im = scipy.misc.imread('1_tree.jpg')
rotated_square = np.rot90(im[x_slice,y_slice].copy())
im[circle(im, centre_x, centre_y,radius)] = rotated_square[circle(rotated_square,
                                                         radius, radius, radius)]
scipy.misc.imsave('sdffs.png',im)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM