NumPy中zeros_like()函數(shù)的使用及說明
在數(shù)據(jù)分析、機器學(xué)習(xí)與科學(xué)計算中經(jīng)常需要創(chuàng)建一個與現(xiàn)有數(shù)組形狀相同、但值全為零的新數(shù)組。
這時,NumPy 提供了一個非常方便的函數(shù) —— numpy.zeros_like()。
當(dāng)想要一個“和現(xiàn)有數(shù)組一樣大,但全是零”的數(shù)組時,記得用 zeros_like()。
本文將深入介紹它的用法、參數(shù)、應(yīng)用場景以及與 numpy.zeros() 的區(qū)別。
一、函數(shù)簡介
numpy.zeros_like() 是 NumPy 提供的一個用于創(chuàng)建零數(shù)組的函數(shù)。
它根據(jù)給定的數(shù)組(或類數(shù)組對象)創(chuàng)建一個形狀、類型相同的新數(shù)組,但所有元素都被初始化為 0。
numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None)
官方文檔介紹地址numpy.zeros_like

二、參數(shù)詳解
| 參數(shù)名 | 說明 | 默認值 |
|---|---|---|
| a | 用作模板的數(shù)組或類數(shù)組對象 | 必填 |
| dtype | 指定返回數(shù)組的數(shù)據(jù)類型 | 默認為 a的數(shù)據(jù)類型 |
| order | 內(nèi)存布局方式:'C'(行優(yōu)先)或 'F'(列優(yōu)先) | 'K'(保持與 a一致) |
| subok | 若為 True,則子類保持原類型;否則返回 np.ndarray | True |
| shape | 可選,用于重新指定形狀 | None |
三、基本用法示例
示例 1:最簡單的用法
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.zeros_like(a)
print("原數(shù)組 a:\n", a)
print("zeros_like 生成的新數(shù)組 b:\n", b)
輸出:
原數(shù)組 a: [[1 2 3] [4 5 6]] zeros_like 生成的新數(shù)組 b: [[0 0 0] [0 0 0]]
會發(fā)現(xiàn):
b與a的形狀完全一致- 元素類型(dtype)也相同
- 所有元素都為
0
示例 2:指定數(shù)據(jù)類型
b = np.zeros_like(a, dtype=float) print(b)
輸出:
[[0. 0. 0.] [0. 0. 0.]]
小技巧:當(dāng)希望創(chuàng)建一個浮點型零矩陣(如在神經(jīng)網(wǎng)絡(luò)中初始化權(quán)重),可以通過 dtype=float 實現(xiàn)。
示例 3:指定不同形狀
b = np.zeros_like(a, shape=(3, 3)) print(b)
輸出:
[[0 0 0] [0 0 0] [0 0 0]]
雖然參考了 a,但通過 shape 參數(shù)指定了一個新的形狀 (3, 3)。
示例 4:處理多維數(shù)組
tensor = np.arange(24).reshape(2, 3, 4)
zeros_tensor = np.zeros_like(tensor)
print("原數(shù)組形狀:", tensor.shape)
print("zeros_like 結(jié)果形狀:", zeros_tensor.shape)
輸出:
原數(shù)組形狀: (2, 3, 4) zeros_like 結(jié)果形狀: (2, 3, 4)
非常適合在深度學(xué)習(xí)中創(chuàng)建梯度矩陣或緩存變量。
四、與numpy.zeros()的區(qū)別
| 函數(shù) | 創(chuàng)建方式 | 形狀來源 | 常用場景 |
|---|---|---|---|
| numpy.zeros(shape) | 手動指定形狀 | 由參數(shù)提供 | 創(chuàng)建全零數(shù)組 |
| numpy.zeros_like(a) | 基于參考數(shù)組 | 繼承自數(shù)組 a | 創(chuàng)建相同結(jié)構(gòu)的零數(shù)組 |
示例對比
a = np.arange(6).reshape(2, 3) z1 = np.zeros((2, 3)) z2 = np.zeros_like(a) print(z1) print(z2)
輸出結(jié)果相同,但 z2 的創(chuàng)建過程更簡潔,更安全(不易出錯)。
五、性能分析
import numpy as np
import time
a = np.random.rand(1000, 1000)
# zeros
start = time.time()
z1 = np.zeros(a.shape)
print("zeros 耗時:", time.time() - start)
# zeros_like
start = time.time()
z2 = np.zeros_like(a)
print("zeros_like 耗時:", time.time() - start)
兩者性能非常接近,但 zeros_like() 避免了顯式指定形狀,代碼更簡潔、更可維護。
六、實際應(yīng)用場景
- 矩陣運算初始化
result = np.zeros_like(matrix)
- 神經(jīng)網(wǎng)絡(luò)梯度緩存
grad_W = np.zeros_like(weights)
- 掩碼操作或圖像處理
mask = np.zeros_like(image, dtype=bool)
- 科學(xué)計算的占位符數(shù)組
temp = np.zeros_like(data, dtype=float)
七、總結(jié)
| 特性 | zeros_like() |
|---|---|
| 功能 | 創(chuàng)建一個與給定數(shù)組形狀和類型相同的零數(shù)組 |
| 優(yōu)點 | 簡潔、安全、自動繼承 dtype 與 shape |
| 常見用途 | 初始化、占位、緩存矩陣、圖像掩碼 |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何解決django-celery啟動后迅速關(guān)閉
在本篇文章里小編給大家整理的是關(guān)于django-celery啟動后迅速關(guān)閉的解決方法,有需要的朋友們學(xué)習(xí)下。2019-10-10
Python基于Socket實現(xiàn)簡易多人聊天室的示例代碼
這篇文章主要介紹了Python基于Socket實現(xiàn)簡易多人聊天室的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Python實現(xiàn)日志文件的自動輪轉(zhuǎn)與定期清理
在進行項目開發(fā)時,合理的日志管理對于系統(tǒng)的穩(wěn)定運行至關(guān)重要,良好的日志記錄不僅能夠幫助開發(fā)者快速定位問題,還能有效提升用戶體驗,本文將結(jié)合實際案例探討如何在Python中通過編程手段實現(xiàn)日志文件的自動輪轉(zhuǎn)與定期清理,需要的朋友可以參考下2025-11-11

