python – 根据圆的面积更改numpy数组中的值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 根据圆的面积更改numpy数组中的值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2726字,纯文字阅读大概需要4分钟。
内容图文
![python – 根据圆的面积更改numpy数组中的值](/upload/InfoBanner/zyjiaocheng/722/9416bc4a2d174fa0b6a784e55572964b.jpg)
上下文
我需要在python中测量组合圆的面积.我想出了使用numpy数组的方法.首先,我用零填充网格(numpy数组),网格中的每个位置对应0.5cm的长度.然后我将圆心放到网格上,并在网格中将此值更改为1.我知道圆的半径,所以我可以计算圆的面积,因为我知道圆的面积我改变了网格中零点的区域.然后我计算网格中的一些频率并使用它来计算组合圆的面积,因为我知道网格中每个位置的长度我可以计算面积.这是目前非常粗糙的方法,我计划在算法确定后将其更改为更精细的颗粒.
例
如果你看一下我在下面发布的图片,它会更好地描述我的想法.我的网格上有两个圆圈(红线),圆圈的中心标有蓝色方块,圆圈占据的区域为浅橙色.我想将标有橙色的区域更改为1.我现在可以改变水平和垂直于圆心的橙色方块,但是从中心开始的对角线方框给我带来了麻烦.
目前的代码
class area():
def make_grid(self):
'''
Each square in the grid represents 0.5 cm
'''
import numpy as np
grid = np.zeros((10,10))
square_length = 0.5
circles = {'c1':[[4,2],1.5],'c2':[[5,6],2.0]}
print grid
for key,val in circles.iteritems():
grid[val[0][0]][val[0][1]] = 1
area = int((val[1] - square_length)/0.5)
for i in xrange(1,area+1):
grid[val[0][0]][val[0][1]+i] = 1 # Change column vals in +ve direction
grid[val[0][0]][val[0][1]-i] = 1 # Chnage column vals in -ve direction
grid[val[0][0]+i][val[0][1]] = 1 # Chnage row vals in +ve direction
grid[val[0][0]-i][val[0][1]] = 1 # Chnage row vals in -ve direction
print ''
print grid
在上面的字典中,键是圆圈名称,值中的第一个元素是圆心坐标,第二个元素是圆的半径.
代码输出:
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 1. 0. 0. 0. 1. 0. 0. 0.]
[ 1. 1. 1. 1. 1. 0. 1. 0. 0. 0.]
[ 0. 0. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 0. 0. 1. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
解决方法:
根据@Jaime的评论更新.
我可能会从这样的事情开始.重点是正确计算圆内像素.
import numpy as np
import matplotlib.pyplot as plt
grid = np.zeros((10,10), dtype=np.bool)
square_length = 0.5
circles = {'c1':[[4,2],1.5],'c2':[[5,6],2.0]}
# Generate arrays of indices/coordiates so we can do the
# calculations the Numpy way, without resorting to loops
# I always get the index order wrong so double check...
xx = np.arange(grid.shape[0])
yy = np.arange(grid.shape[1])
for val in circles.itervalues():
radius = val[1]
# same index caveat here
# Calling Mr Pythagoras: Find the pixels that lie inside this circle
inside = (xx[:,None] - val[0][0]) ** 2 + (yy[None, :] - val[0][1]) ** 2 <= (radius ** 2)
# do grid & inside and initialize grid with ones for intersection instead of union
grid = grid | inside
plt.imshow(grid)
plt.show()
如果你在交叉路口之后,请注意你的圆心是sqrt(17)?= 4.123 ..单位,两个半径的总和达到3.5,所以实际上没有重叠.
内容总结
以上是互联网集市为您收集整理的python – 根据圆的面积更改numpy数组中的值全部内容,希望文章能够帮你解决python – 根据圆的面积更改numpy数组中的值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。