3

私は3つの配列を持っています:longitude(400,600)、latitude(400,600)、data(30,400,60); 私がやろうとしているのは、その場所(緯度と経度)に従ってデータ配列の値を抽出することです。

これが私のコードです:

import numpy
import tables

hdf = "data.hdf5"
h5file = tables.openFile(hdf, mode = "r")

lon = numpy.array(h5file.root.Lonitude)
lat = numpy.array(h5file.root.Latitude)
arr = numpy.array(h5file.root.data)

lon = numpy.array(lon.flat)
lat = numpy.array(lat.flat)
arr = numpy.array(arr.flat)

lonlist=[]
latlist=[]
layer=[]
fre=[]

for i in range(0,len(lon)):
    for j in range(0,30):
        longi = lon[j]
        lati = lat[j]
        layers=[j]
        frequency= arr[i]

        lonlist.append(longi)
        latlist.append(lati)
        layer.append(layers)
        fre.append(frequency)

output = numpy.column_stack((lonlist,latlist,layer,fre))

問題は、「頻度」が私が望むものではないことです。データ配列を軸ゼロに沿って平坦化し、「頻度」が1つの場所で30の値になるようにします。特定の軸に沿ってndarrayをフラット化しますか?

4

4 に答える 4

6

np.ravel(your_array)、またはを試すことができますyour_array.shape=-1。このnp.ravel関数では、オプションの引数を使用できます。行優先の順序または列優先の順序をorder選択します。CF

于 2012-09-24T08:49:32.470 に答える
4

transposeあなたが実際に望んでいたのは、軸の順序を変更することだけだったと思います。何をするかによっては、転置自体がコピーを作成しないため、メモリレイアウトを最適化するために.copy()afterを実行すると便利な場合があります。transposed

F追加するだけで、C順序を超えて何かを作成したい場合はtransposed = ndarray.transpose([1,2,0])、最初の軸を最後に移動し、最後の軸を2番目の位置に移動してから実行できますtransposed.ravel()(Cの順序を想定したため、0軸を最後に移動しました) 。reshape単純なものよりも強力なものを使用することもできますravel(戻り形状は任意の寸法にすることができます)。

ストライドが正確に加算されない限り、numpyは配列のコピーを作成する必要があることに注意してくださいtransposed.flat()。多くの場合、非常に優れたイテレーターによってそれを回避できます。

于 2012-09-24T09:13:38.103 に答える
0
>>> a = np.random.rand(2,2,2)
>>> a
array([[[ 0.67379148,  0.95508303],
        [ 0.80520281,  0.34666202]],

       [[ 0.01862911,  0.33851973],
        [ 0.18464121,  0.64637853]]])
>>> np.ravel(a)
array([ 0.67379148,  0.95508303,  0.80520281,  0.34666202,  0.01862911,
        0.33851973,  0.18464121,  0.64637853])
于 2012-09-24T08:53:58.393 に答える
0

あなたは本質的に高次元テンソルを展開しています。試してみてくださいtensorly.unfold(arr, mode=the_direction_you_want)。例えば、

import numpy as np
import tensorly as tl

a = np.zeros((3, 4, 5))

b = tl.unfold(a, mode=1)

b.shape # (4, 15)
于 2021-01-24T23:46:25.090 に答える