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

二、參數(shù)詳解
| 參數(shù)名 | 說(shuō)明 | 默認(rèn)值 |
|---|---|---|
| a | 用作模板的數(shù)組或類數(shù)組對(duì)象 | 必填 |
| dtype | 指定返回?cái)?shù)組的數(shù)據(jù)類型 | 默認(rèn)為 a的數(shù)據(jù)類型 |
| order | 內(nèi)存布局方式:'C'(行優(yōu)先)或 'F'(列優(yōu)先) | 'K'(保持與 a一致) |
| subok | 若為 True,則子類保持原類型;否則返回 np.ndarray | True |
| shape | 可選,用于重新指定形狀 | None |
三、基本用法示例
示例 1:最簡(jiǎn)單的用法
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]]
會(huì)發(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)建一個(gè)浮點(diǎn)型零矩陣(如在神經(jīng)網(wǎng)絡(luò)中初始化權(quán)重),可以通過(guò) dtype=float 實(shí)現(xiàn)。
示例 3:指定不同形狀
b = np.zeros_like(a, shape=(3, 3)) print(b)
輸出:
[[0 0 0] [0 0 0] [0 0 0]]
雖然參考了 a,但通過(guò) shape 參數(shù)指定了一個(gè)新的形狀 (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)建方式 | 形狀來(lái)源 | 常用場(chǎng)景 |
|---|---|---|---|
| numpy.zeros(shape) | 手動(dòng)指定形狀 | 由參數(shù)提供 | 創(chuàng)建全零數(shù)組 |
| numpy.zeros_like(a) | 基于參考數(shù)組 | 繼承自數(shù)組 a | 創(chuàng)建相同結(jié)構(gòu)的零數(shù)組 |
示例對(duì)比
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)建過(guò)程更簡(jiǎn)潔,更安全(不易出錯(cuò))。
五、性能分析
import numpy as np
import time
a = np.random.rand(1000, 1000)
# zeros
start = time.time()
z1 = np.zeros(a.shape)
print("zeros 耗時(shí):", time.time() - start)
# zeros_like
start = time.time()
z2 = np.zeros_like(a)
print("zeros_like 耗時(shí):", time.time() - start)
兩者性能非常接近,但 zeros_like() 避免了顯式指定形狀,代碼更簡(jiǎn)潔、更可維護(hù)。
六、實(shí)際應(yīng)用場(chǎng)景
- 矩陣運(yùn)算初始化
result = np.zeros_like(matrix)
- 神經(jīng)網(wǎng)絡(luò)梯度緩存
grad_W = np.zeros_like(weights)
- 掩碼操作或圖像處理
mask = np.zeros_like(image, dtype=bool)
- 科學(xué)計(jì)算的占位符數(shù)組
temp = np.zeros_like(data, dtype=float)
七、總結(jié)
| 特性 | zeros_like() |
|---|---|
| 功能 | 創(chuàng)建一個(gè)與給定數(shù)組形狀和類型相同的零數(shù)組 |
| 優(yōu)點(diǎn) | 簡(jiǎn)潔、安全、自動(dòng)繼承 dtype 與 shape |
| 常見(jiàn)用途 | 初始化、占位、緩存矩陣、圖像掩碼 |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Python實(shí)現(xiàn)個(gè)人手機(jī)定位分析
TransBigData是一個(gè)為交通時(shí)空大數(shù)據(jù)處理、分析和可視化而開發(fā)的Python包。本文就來(lái)用它實(shí)現(xiàn)個(gè)人手機(jī)定位分析,感興趣的小伙伴可以了解一下2023-04-04
django創(chuàng)建最簡(jiǎn)單HTML頁(yè)面跳轉(zhuǎn)方法
今天小編就為大家分享一篇django創(chuàng)建最簡(jiǎn)單HTML頁(yè)面跳轉(zhuǎn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
python多線程多并發(fā)啟動(dòng)appium服務(wù)的實(shí)現(xiàn)
使用Dos命令或者bat批處理來(lái)手動(dòng)啟動(dòng)appium服務(wù),啟動(dòng)效率低下,本文主要介紹了python多線程多并發(fā)啟動(dòng)appium服務(wù)的實(shí)現(xiàn),具有一定的 參考價(jià)值,感興趣的可以了解一下2024-02-02

