導航:首頁 > 編程語言 > python中調換數據位置

python中調換數據位置

發布時間:2025-08-24 23:06:15

1. python氣象數據處理進階之Xarray(6):數據重組與換形

這一部分涉及到了常用的操作,比如調換維度的位置,給數據重新reshape換形等等,建議大家可以認真閱讀這部分。
老樣子,先新建一個數組

比如說在求某個東西時需要將時間維放在最後一維,但是數據本身的時間在第一維,那麼便可以用到這個操作。
第一種是精準換位,指定每個維度的位置

第二種是單獨換位,只對指定維度換位,將time放在最後,其餘不變

第三種為全部換位,相當於數組轉置

擴展指增加一個維度,壓縮指將一個維度擠壓掉

官方文檔中接下來有一段是關於DataArray向DataSet轉換的,個人感覺放在這一章節並不合理,我後邊會整理放進Python氣象數據處理進階之Xarray(1)中(我覺得兩種基礎數據結構以及互相轉換應該最開始介紹的)。所以接下來跳過這部分。

個人感覺可能處理站點數據會用到這個方法
換一個數組演示

現在將這個2維數組堆疊成1維

也可以拆分,其實就是反堆疊

最重要的是不同於Pandas,Xarray的stack不缺自動丟失缺測值!!!
Xarray還提供了將不同變數stack的例子,有興趣的可以去看看。這個用法感覺比較雞肋

這塊比較難理解,建議還是先讀第一篇文章,弄清數據結構,da數組顯示Dimensions without coordinates: x,而通過da.set_index函數,將X設置為混合索引號。
之後便可以實線自由索引:

通過mda.reset_index('x')重置。
reorder_levels()函數允許調換索引順序(個人感覺比較雞肋)

這小節應該是這篇文章和數組換形換維同等重要的。

這就是對數組進行滾動。這個的作用主要在於做差分計算。雖然前邊講過Xarray提供了中央差計算函數,但是仍需要更靈活的操作,滾動函數就實現了這個目的。

2. python怎麼修改某個內存地址的數據

使用ctypes模塊調用WriteProcessMemory函數,在創建程序進程後,就可以修改該程序指定內存地址。WriteProcessMemory的函數原型如下所示。

BOOL WriteProcessMemory(

HANDLE hProcess,

LPVOID lpBaseAddress,

LPCVOID lpBuffer,

SIZE_T nSize,

SIZE_T* lpNumberOfBytesWritten

);

其參數含義如下。

· hProcess:要寫內存的進程句柄。

· lpBaseAddress:要寫的內存起始地址。

· lpBuffer:寫入值的地址。

· nSize:寫入值的大小。

· lpNumberOfBytesWritten :實際寫入的大小。

python代碼示例如下:

fromctypesimport*
#定義_PROCESS_INFORMATION結構體
class_PROCESS_INFORMATION(Structure):
_fields_=[('hProcess',c_void_p),
('hThread',c_void_p),
('dwProcessId',c_ulong),
('dwThreadId',c_ulong)]
#定義_STARTUPINFO結構體
class_STARTUPINFO(Structure):
_fields_=[('cb',c_ulong),
('lpReserved',c_char_p),
('lpDesktop',c_char_p),
('lpTitle',c_char_p),
('dwX',c_ulong),
('dwY',c_ulong),
('dwXSize',c_ulong),
('dwYSize',c_ulong),
('dwXCountChars',c_ulong),
('dwYCountChars',c_ulong),
('dwFillAttribute',c_ulong),
('dwFlags',c_ulong),
('wShowWindow',c_ushort),
('cbReserved2',c_ushort),
('lpReserved2',c_char_p),
('hStdInput',c_ulong),
('hStdOutput',c_ulong),
('hStdError',c_ulong)]
NORMAL_PRIORITY_CLASS=0x00000020#定義NORMAL_PRIORITY_CLASS
kernel32=windll.LoadLibrary("kernel32.dll")#載入kernel32.dll
CreateProcess=kernel32.CreateProcessA#獲得CreateProcess函數地址
ReadProcessMemory=kernel32.ReadProcessMemory#獲得ReadProcessMemory函數地址
WriteProcessMemory=kernel32.WriteProcessMemory#獲得WriteProcessMemory函數地址
TerminateProcess=kernel32.TerminateProcess
#聲明結構體
ProcessInfo=_PROCESS_INFORMATION()
StartupInfo=_STARTUPINFO()
file='ModifyMe.exe'#要進行修改的文件
address=0x0040103c#要修改的內存地址
buffer=c_char_p("_")#緩沖區地址
bytesRead=c_ulong(0)#讀入的位元組數
bufferSize=len(buffer.value)#緩沖區大小
#創建進程
ifCreateProcess(file,0,0,0,0,NORMAL_PRIORITY_CLASS,0,0,byref(StartupInfo),byref(ProcessInfo)):
#讀取要修改的內存地址,以判斷是否是要修改的文件
ifReadProcessMemory(ProcessInfo.hProcess,address,buffer,bufferSize,byref(bytesRead)):
ifbuffer.value=='x74':
buffer.value='x75'#修改緩沖區內的值,將其寫入內存
#修改內存
ifWriteProcessMemory(ProcessInfo.hProcess,address,buffer,bufferSize,byref(bytesRead)):
print'成功改寫內存!'
else:
print'寫內存錯誤!'
else:
print'打開了錯誤的文件!'
TerminateProcess(ProcessInfo.hProcess,0)#如果不是要修改的文件,則終止進程
else:
print'讀內存錯誤!'
else:
print'不能創建進程!'
閱讀全文

與python中調換數據位置相關的資料

熱點內容
php高端技術 瀏覽:646
cad中xc是什麼命令 瀏覽:26
程序員公開課應該去哪裡學 瀏覽:57
程序員那麼可愛的小摩托 瀏覽:364
深圳java程序員 瀏覽:400
java中的通信 瀏覽:614
php端到端加密 瀏覽:359
世界最奇特的解壓方式 瀏覽:71
鎂粉解壓視頻教學 瀏覽:741
程序員共享網站 瀏覽:940
搬家服務app怎麼開發 瀏覽:418
騰訊雲外賣伺服器 瀏覽:156
單片機1602顯示程序 瀏覽:259
php檢測網路 瀏覽:340
程序員面試金典第6版 瀏覽:722
內存2g編譯安卓 瀏覽:416
單片機小數點怎麼亮 瀏覽:416
安卓手機怎麼設置健康碼雙擊兩下就出來 瀏覽:271
同一個文件夾可以存在兩個相同的文件嗎 瀏覽:541
動態重編譯jit 瀏覽:136