Arrays 如何处理Numpy中的圆度?
我需要用numpy计算一些方向数组。我把360度分成16组,每组22.5度。我想要组中的0度,即在-11 25度和11.25度之间得到方向。但问题是,我怎样才能得到168.75度和-168.75度之间的组Arrays 如何处理Numpy中的圆度?,arrays,numpy,geometry,degrees,Arrays,Numpy,Geometry,Degrees,我需要用numpy计算一些方向数组。我把360度分成16组,每组22.5度。我想要组中的0度,即在-11 25度和11.25度之间得到方向。但问题是,我怎样才能得到168.75度和-168.75度之间的组 a[numpy.where(a<0)] = a[numpy.where(a<0)]+360 for m in range (0,3600,225): b = (a*10 > m)-(a*10 >= m+225).astype(float)
a[numpy.where(a<0)] = a[numpy.where(a<0)]+360
for m in range (0,3600,225):
b = (a*10 > m)-(a*10 >= m+225).astype(float)
c = numpy.apply_over_axes(numpy.sum,b,0)
a[numpy.where(a=m+225).aType(float)
c=numpy。在_轴上应用_(numpy.sum,b,0)
< /代码> 如果要将数据分成16组,中间有0度,为什么在m(03600225) 中为m编写代码> >
我想说的是,对于范围(-1125360002250)内的m,您应该从开始(注意,现在我使用的是100而不是10),这将为您提供所需的组
wind_sectors = [x/100.0 for x in range(-1125,36000,2250)]
for m in wind_sectors:
#DO THINGS
我不得不说我不太理解你的剧本和它的目标。。。
对于圆度,我建议如下:
- 一个条件,你把你有问题的数据放在那里,也就是说,你必须处理零附近的转换
- 放置所有其他数据的条件
例如,在本例中,我正在打印数组中属于每个扇区的所有元素:
import numpy
def wind_sectors(a_array, nsect = 16):
step = 360./nsect
init = step/2
sectores = [x/100.0 for x in range(int(init*100),36000,int(step*100))]
a_array[a_array<0] = a_arraya_array[a_array<0]+360
for i, m in enumerate(sectores):
print 'Sector'+str(i)+'(max_threshold = '+str(m)+')'
if i == 0:
for b in a_array:
if b <= m or b > sectores[-1]:
print b
else:
for b in a_array:
if b <= m and b > sectores[i-1]:
print b
return "it works!"
# TESTING IF THE FUNCTION IS WORKING:
a = numpy.array([2,67,89,3,245,359,46,342])
print wind_sectors(a, 16)
# WITH NDARRAYS:
b = numpy.array([[250,31,27,306], [142,54,260,179], [86,93,109,311]])
print wind_sectors(b.flat[:], 16)
不要做a[numpy.where(aIt没有与ndarray一起工作,我得到:if b sectores[-1]:ValueError:包含多个元素的数组的真值不明确。如果您有一个二维或多维数组,对于a_数组中的b:
将不会为您提供数组的元素,而是为您提供包含多个元素的数组切片。要解决此问题,您可以使用numpy.ndarray.flat
,它将返回一个一维迭代器o我将编辑我的答案!非常感谢您的帮助!但是,我发现使用flat[:]无法保留ndarray的原始形状…稍后我需要应用其他操作,如numpy.sum和numpy.vstack,以计算特定位置的风扇区中有多少个元素…对此有何建议?再次感谢!
import numpy
def wind_sectors(a_array, nsect = 16):
step = 360./nsect
init = step/2
sectores = [x/100.0 for x in range(int(init*100),36000,int(step*100))]
a_array[a_array<0] = a_arraya_array[a_array<0]+360
for i, m in enumerate(sectores):
print 'Sector'+str(i)+'(max_threshold = '+str(m)+')'
if i == 0:
for b in a_array:
if b <= m or b > sectores[-1]:
print b
else:
for b in a_array:
if b <= m and b > sectores[i-1]:
print b
return "it works!"
# TESTING IF THE FUNCTION IS WORKING:
a = numpy.array([2,67,89,3,245,359,46,342])
print wind_sectors(a, 16)
# WITH NDARRAYS:
b = numpy.array([[250,31,27,306], [142,54,260,179], [86,93,109,311]])
print wind_sectors(b.flat[:], 16)
>>> a = numpy.array([[0,1,2,3], [4,5,6,7], [8,9,10,11]])
>>> original = a.shape
>>> b = a.flat[:]
>>> c = b.reshape(original)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> b
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> c
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])