簡體   English   中英

如何沿軸展平一個 numpy ndarray?

[英]How to flatten a numpy ndarray along axis?

我有三個數組:經度(400,600),緯度(400,600),數據(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))

問題是“頻率”不是我想要的。我希望數據數組沿零軸展平,這樣“頻率”將是一個位置的 30 個值。numpy 中是否有這樣的函數沿特定軸展平ndarray?

您可以嘗試np.ravel(your_array)your_array.shape=-1 np.ravel函數允許您使用可選參數order :選擇C作為行優先順序或F作為列優先順序。

我猜你真正想要的只是transpose來改變軸順序。 根據您對它的處理方式,在transposed后執行.copy()以優化內存布局可能很有用,因為轉置本身不會創建副本。

補充一點,如果你想制作一些超出FC順序的東西,你可以使用transposed = ndarray.transpose([1,2,0])將第一個軸移動到最后,最后一個移動到第二個位置和然后做transposed.ravel() (我假設 C 順序,所以移動 0 軸到最后)。 您還可以使用比簡單的ravel更強大的reshape (返回形狀可以是任何尺寸)。

請注意,除非步幅加起來完全相同,否則 numpy 必須復制數組,在許多情況下,您可以通過非常好的transposed.flat()迭代器來避免這種情況。

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

您本質上是在展開一個高維張量。 嘗試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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM