Arrays 如何处理Numpy中的圆度?

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)

我需要用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)    
        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]])