np.savez:多面手之一的numpy與數據存儲

一、基礎知識

numpy是一個廣泛使用的Python庫,用於提供高性能計算和數據分析。而數據存儲則是數據處理時的關鍵部分之一,它涉及到將數據從一種格式轉換成另一種格式,以便在處理和分析中使用。在numpy中,np.savez()函數就是一個非常有用的功能,可以有效地用於存儲和加載多個numpy數組。該函數將numpy的多個數組保存在單個壓縮文件中,並可以在後續工作中輕鬆地加載和分析這些數組。例如:

import numpy as np 

# 創建numpy數組
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.array([7, 8, 9])

# 將數組保存到“savez.npz”文件中
np.savez('savez.npz', a=a, b=b, c=c)

# 從“savez.npz”文件中加載數組
data = np.load('savez.npz')
print(data['a'])
print(data['b'])
print(data['c'])

這裡,我們首先創建了3個numpy數組(a,b和c),然後使用np.savez()函數將它們保存在“savez.npz”文件中,參數a、b和c指定將要保存的數組。稍後,我們使用np.load()函數從文件中加載數組,並將它們存儲在一個名為“data”的變量中。最後,我們對每個數組使用print()函數進行打印,以此來查看它們的值。

二、高級應用

np.savez()是一個非常靈活的函數,其可以處理各種不同類型和形狀的數組。下面,我們將介紹一些np.savez()函數的高級應用和技巧。

1.將多個數組保存在一個文件中

有時,您需要保存多個不同類型和形狀的numpy數組,以便在以後的工作中進行使用。np.savez()函數可以幫助您實現這一點,具體方法是通過在函數中指定多個參數名,在保存數據時將它們一起保存到同一文件中。例如:

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([5, 6, 7])
arr3 = np.array(['one', 'two', 'three'])

np.savez('multi_array.npz', a=arr1, b=arr2, c=arr3)

load_array = np.load('multi_array.npz')
print(load_array['a'])
print(load_array['b'])
print(load_array['c'])

在這個示例中,我們創建了一個包含3個不同類型和形狀的numpy數組的文件。當我們加載該文件時,在打印每個變量a、b和c時,我們可以看到已成功保存各個數組。

2.壓縮存儲

np.savez()函數默認使用未壓縮的存儲格式,但在某些情況下,您可能需要使用更高效的壓縮格式。使用numpy.savez_compressed()函數即可實現這一點,例如:

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([5, 6, 7])
arr3 = np.array(['one', 'two', 'three'])

np.savez_compressed('multi_array.npz', a=arr1, b=arr2, c=arr3)

load_array = np.load('multi_array.npz')
print(load_array['a'])
print(load_array['b'])
print(load_array['c'])

通過使用np.savez_compressed()函數,我們可以在將numpy數組保存到文件中時使用壓縮格式。這使得文件大小更小,而且加載速度更快。

3. 附加數據

在某些情況下,您可能需要將一個或多個numpy數組附加到已有的npz文件中。在這種情況下,np.savez()函數會很有用,您可以先加載文件,然後使用update()將新的數組添加到文件中。例如:

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
np.savez('multi_array.npz', a=arr1)

arr2 = np.array([5, 6, 7])
update_array = np.load('multi_array.npz')

update_array.update({'b':arr2})
np.savez('multi_array.npz', **update_array)

load_array = np.load('multi_array.npz')
print(load_array['a'])
print(load_array['b'])

在這個示例中,我們首先使用np.savez()函數將一個numpy數組保存到“multi_array.npz”中。接着,我們創建另一個數組,並在使用np.load()函數加載原始NPZ文件之後調用.update()方法將其附加到該文件中。最後,我們再一次使用np.savez()函數將新文件保存到磁盤上。在打印每個變量時,我們可以看到已成功保存各個數組,而且新的數組也被添加到了文件中。

4. 子文件夾封裝

在numpy中,您可以將多個數組存儲為單個文件,但如果數組數量很多,有時將它們封裝到子文件夾中會更好。您可以通過使用os.mkdir()和os.path.join()函數實現這一目標,例如:

import numpy as np
import os

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.array([7, 8, 9])
 
if not os.path.exists('data'):
    os.makedirs('data')
 
np.savez(os.path.join('data', 'multi_array.npz'), a=arr1, b=arr2, c=arr3)

load_array = np.load(os.path.join('data', 'multi_array.npz'))
print(load_array['a'])
print(load_array['b'])
print(load_array['c'])

在這個示例中,我們使用os模塊向npz文件添加子文件夾。在if語句中,我們使用os.makedirs()方法來檢查”data”文件夾是否存在。然後,我們使用np.savez()函數將numpy數組保存到名為“multi_array.npz”的(隱式)文件中。加載文件後,我們可以發現已成功保存所有數組。

三、結論

在本文中,我們介紹了NumPy的核心庫功能之一即np.savez(),以及一些高級應用和技巧。我們發現,np.savez()是一個非常有用的函數,具有廣泛的使用範圍,並可以輕鬆地用於存儲和加載numpy數組。np.savez()函數使得數據的存儲和處理更加高效,這對數據科學和機器學習的發展有着至關重要的作用。

原創文章,作者:FOQP,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/142933.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FOQP的頭像FOQP
上一篇 2024-10-14 18:43
下一篇 2024-10-14 18:43

相關推薦

  • Python中的np.arange函數

    在本篇文章中,我們將着眼於Python中的np.arange函數。我們將從多個方面對這個函數進行全面解析,涵蓋的內容包括介紹、功能、用法、案例以及注意事項等。如果您想深入了解np.…

    編程 2025-04-28
  • Anaconda Python – 多面手的全能編程開發工具

    Anaconda Python是一個全能的編程開發工具,它集成了多種Python數據科學和機器學習庫以及其他工具。在這篇文章中,我們將從多個方面對Anaconda Python進行…

    編程 2025-04-27
  • 深入理解np.diag

    一、介紹 NumPy是一個開源的Python科學計算庫,它支持高維數組和矩陣運算。np.diag是NumPy中的一個函數,可以用來創建對角矩陣、獲取對角線元素、構建對角線數組等。 …

    編程 2025-04-25
  • np.divide函數詳解

    一、簡介 np.divide函數是numpy庫中的一個函數,用於對兩個數組進行逐元素的除法運算。它是一個通用的、基礎的元素級函數,可以對數組中的任何類型進行操作。使用np.divi…

    編程 2025-04-24
  • 一文詳解np.mat函數

    一、np.mat函數是什麼? np.mat函數是一個將數組轉換成矩陣的函數,是numpy中的一個基礎函數。它可以將一個有序的n維數組轉換成一個矩陣,並返回該矩陣的視圖,也就是返回一…

    編程 2025-04-23
  • 深入探索np.linalg.norm函數

    np.linalg.norm是numpy庫中常用的函數之一,用於計算向量或矩陣的範數。在許多數學和物理問題中,範數是一個關鍵的概念,它衡量了向量的長度大小和矩陣的大小。在本文中,我…

    編程 2025-04-23
  • 深入淺出:np.floor

    一、概述 在Python中,numpy模塊是一個強大的數學工具集,提供了許多有用的功能。其中,np.floor是一個常用的函數,它的作用是返回輸入一個小數後向下取整的結果。 imp…

    編程 2025-04-22
  • np.reshape方法詳解

    一、基本介紹 np.reshape()方法是NumPy中的一個關鍵操作,用於重塑數組的尺寸。通過該方法可以改變數組的形狀,維度數量和元素數量不一定會改變。 通常情況下,np.res…

    編程 2025-04-20
  • 科普 | np.tanh的多面向探究

    一、簡介 np.tanh是numpy庫中的一個函數,常被用來處理神經網絡中的激活函數,或者數學中的一些複雜計算。tanh即雙曲正切函數。 二、單變量情形 首先,我們看下單變量tan…

    編程 2025-04-18
  • 用Jedis連接Redis集群實現高效數據存儲與讀取

    Redis集群是一個數據高可用解決方案,通過將數據分散在多台計算機上的多個 Redis 節點來實現。它可以自動在多個節點之間按照一定的規則(比如哈希槽)分配數據,以此來實現數據的分…

    編程 2025-04-12

發表回復

登錄後才能評論