0

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)
4

1 に答える 1

1

データを 0 度を中心として 16 のグループに分割する場合、なぜ と書いているのfor m in range (0,3600,225)ですか?

>>> [x/10. for x in range(0,3600,225)]
[0.0, 22.5, 45.0, 67.5, 90.0, 112.5, 135.0, 157.5, 180.0, 202.5, 225.0, 247.5,
 270.0, 292.5, 315.0, 337.5]
## this sectors are not the ones you want!

最初から始めるべきだと思いますfor m in range (-1125,36000,2250)(現在、10の代わりに100の係数を使用していることに注意してください)。これにより、必要なグループが得られます...

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) 

flat reshape 機能:

>>> 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]])
于 2012-05-23T11:20:32.580 に答える