攝影或3C

Python: numpy 4d array如何取值? pandas如何去掉空列/空欄? 如何重置DataFrame的index/欄標籤? df_drop = df_Raw.dropna (axis=0, how=”all”).reset_index(drop=True) ; df_drop1.columns = list(range(df_drop1.columns.size))

import numpy as np

a = np.arange(120).reshape(2,3,4,5)

a: 

舉例:如何在4D array中

取出17這個元素?

最上方的左邊跟

最下方的右邊都有4個[]

 

a[0 , : , : , :] #[]剩下3個

#專注看左邊有3~4個[]的地方,第0個元素有4個

a[0 , 0 , : , :] #[]剩下2個

#專注看左邊有2~3個[]的地方,第0個元素有3個

 

a[0,0,3] #[]剩下1個

a[0,0,3,2] #取出元素17

#電腦只認[],一層一層剝開

#4D array回到1D array

#只是元素皆為box (3D array)

 

print(a): 

[[[[ 0 1 2 3 4]
     [ 5 6 7 8 9]
     [ 10 11 12 13 14]
     [ 15 16 17 18 19]]

   [[ 20 21 22 23 24]
     [ 25 26 27 28 29]
     [ 30 31 32 33 34]
     [ 35 36 37 38 39]]

    [[ 40 41 42 43 44]
     [ 45 46 47 48 49]
     [ 50 51 52 53 54]
     [ 55 56 57 58 59]]]

 [[[ 60 61 62 63 64]
    [ 65 66 67 68 69]
    [ 70 71 72 73 74]
    [ 75 76 77 78 79]]

  [[ 80 81 82 83 84]
   [ 85 86 87 88 89]
   [ 90 91 92 93 94]
   [ 95 96 97 98 99]]

 [[100 101 102 103 104]
   [105 106 107 108 109]
   [110 111 112 113 114]
   [115 116 117 118 119]]]]

推薦hahow線上學習python: https://igrape.net/30afN

使用pandas讀進來的df_Raw: 

(左半部為H/V Amp

右半部為H/V Phase)

freq = [12000,15000,18000]
pol = [“H”,”V”]
ap = [“Amplitude”,”Phase”]
x = [37.75, 38.5, 39.25] #可用iloc[切片]取出
y = [110.75, 111.5] #可用iloc[切片]取出

import numpy as np
import pandas as pd
import os
a = np.zeros((len(freq),len(pol),len(ap),len(x),len(y)),dtype=float)

folder = r”C:\antenna_AMS\21046\emt2csv\01″
fname = r”01test.csv”
fpath = os.path.join(folder,fname)

df_Raw = pd.read_csv(fpath,header=None)
df_Raw.to_excel(os.path.join(folder,”df_RAW.xlsx”))
df_drop  = df_Raw.dropna  (axis=0, how=”all”).reset_index(drop=True)
#dropna() 配合.reset_index(drop=True), index才好認
df_drop1 = df_drop.dropna (axis=1, how=”all”)
df_drop1.columns = list(range(df_drop1.columns.size))
df_drop1.to_excel(os.path.join(folder,”df_drop1.xlsx”) )
df_Amp = df_drop1.iloc[:,0:3] #還含有H,V,尚未分開
df_Pha = df_drop1.iloc[:,3:] #還含有H,V,尚未分開
#df_drop1已經去掉空欄/空列,
#欄/列index也是連續的:

aryHA = np.zeros((len(freq), len(x), len(y)),dtype=float)
# (len(freq), len(x), len(y) 是一個shape參數(tuple),不是三個參數
# shape = (3, 3, 2)
start = 1
for fidx in range(len(freq)):  
  end   = start + len(x)
#    print(fidx,”end:”,end)
  aryHA[fidx,:,:] = \
      df_Amp.iloc[start:end,1::].values
#    print(aryHA)
  start = end + 1
#    print(fidx,”start:”,start)
aryVA = np.zeros((len(freq), len(x), len(y)),dtype=float)
# (len(freq), len(x), len(y) 是一個shape參數(tuple),
#不是三個參數
#不要漏了tuple的()
# shape = (3, 3, 2)
start = len(x)*len(freq) + len(freq)+1
for fidx in range(len(freq)):
  end   = start + len(x)
#    print(fidx,”end:”,end)
  aryVA[fidx,:,:] = \
      df_Amp.iloc[start:end,1::].values
#    print(“ary VA:”,aryVA)
  start = end + 1
#    print(fidx,”start:”,start)  

aryHVA = np.zeros((2,len(freq), len(x), len(y)),dtype=object)
“””
#aryHVA[0] = “H”

[[[‘H’ ‘H’]
[‘H’ ‘H’]
[‘H’ ‘H’]]

[[‘H’ ‘H’]
[‘H’ ‘H’]
[‘H’ ‘H’]]

[[‘H’ ‘H’]
[‘H’ ‘H’]
[‘H’ ‘H’]]]

#aryHVA[1] = “V”
“””
aryHVA[0,:,:,:] = aryHA
aryHVA[1,:,:,:] = aryVA 
4D array的axis 0 長度只有2(H Amp , V Amp)
df_Raw右半邊的部分
也可以造出一樣的4D array
(aryHVP包含H Phase, V Phase資料)
可以將兩個4D array vstack
或者axis 0長度增加到2+2,
多涵蓋(H Phase , V phase)資料
這個4D array就含所有excel的資料
(X/Y/freq… axis資料存在別的array)
或者再多一個軸的5D array
其axis 0 長度2
第0,1元素(分別代表Amp, Phase)
都是4D array (aryHVA , aryHVP)
有種巢狀dict的感覺
最後完成的4D array:
df_Raw的左半部跟4D array一起看:

推薦hahow線上學習python: https://igrape.net/30afN

同邏輯處理右半部的H/V Phase: 

3D的H Phase與V Phase: 

#仿造前面的4D aryHVA,

#但axis 0長度增加到4

HVAP = np.vstack( (aryHA,aryVA,aryHP,aryVP) )

#同效果

aryHVAP[0,:,:,:] = aryHA #H Amp
aryHVAP[1,:,:,:] = aryVA #V Amp
aryHVAP[2,:,:,:] = aryHP #H Phase
aryHVAP[3,:,:,:] = aryVP #V Phase

或者做一個dict

四個key分別為

“aryHA”  #H Amp
“aryVA”  #V Amp
“aryHP”  #H Phase
“aryVP”  #V Phase

四個value皆為對應的3D array

也會好理解

使用4D array

就只能用0, 1, 2, 3代表

 

4D aryHVAP:

4D aryHVAP[2:,]跟df_Raw右半邊比較:

推薦hahow線上學習python: https://igrape.net/30afN

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡