gpt4 book ai didi

python - 旋转数组 - 并随后对其进行操作

转载 作者:行者123 更新时间:2023-12-01 04:47:28 24 4
gpt4 key购买 nike

我正在尝试创建一个数组 (101,101),数组中每个数字的值由其距中心的距离给出。

到目前为止,我已经成功地在数组的“顶部四分之一”中实现了此功能。我找到了一种旋转阵列的方法,该方法也有效。但我想做的是旋转数组,然后对其应用相同的代码,以在下一个“象限”上获得所需的效果。

from pylab import *

close()

z=ones((101,101),dtype=integer)

a=0
b=0
c=100
d=50
while a<=100 and b<=100 and c>=0 and d<=50:
z[a,b:c]=d
a=a+1
b=b+1
c=c-1
d=d-1

x=zip(*z[::-1])

当我将相同的代码应用于新数组“x”时,我无法发生任何事情。

from pylab import *

close()

z=ones((101,101),dtype=integer)

a=0
b=0
c=100
d=50
while a<=100 and b<=100 and c>=0 and d<=50:
z[a,b:c]=d
a=a+1
b=b+1
c=c-1
d=d-1

x=zip(*z[::-1])


x=zip(*z[::-1])
while a<=100 and b<=100 and c>=0 and d<=50:
x[a,b:c]=d
a=a+1
b=b+1
c=c-1
d=d-1
g=zip(*x[::,-1])

imshow(g)
show()

这只是告诉我 g 没有定义,但看起来它应该对我有用...请有人告诉我出了什么问题?

谢谢!

最佳答案

问题是,通过像这样 x = zip(*z[::-1]) 旋转数组,您将 numpy.array 转换为常规数组Python list,对于那些你不能使用像 z[a,b:c] = d 这样的元组索引。

与其旋转数组然后再次填充同一个季度,为什么不在同一个循环中填充所有季度呢?您只需翻转数组中的范围即可。

此外,我会将其设为 for 循环以使事情变得更容易。试试这个:

z = ones((101, 101), dtype=integer)
for d in range(51):
a = 50 - d
b = 50 + d
z[a, a:b+1] = d
z[b, a:b+1] = d
z[a:b+1, a] = d
z[a:b+1, b] = d
imshow(z)
show()

或者,如果您想保留“旋转”方法,请确保将旋转后的数组转回实际的numpy.array。再次,我建议为此使用两个 for 循环。

for i in range(4):
for d in range(51):
a = 50 - d
b = 50 + d
z[a, a:b] = d
z = array(zip(*z[::-1]))

或者一次性填充数组的整个 block ,从外到内:

for d in range(50, 0, -1):
a = 50 - d
b = 51 + d
z[a:b, a:b] = d

关于python - 旋转数组 - 并随后对其进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29120835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com