NumPy zeros()函数使用小结
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、函数简介</a></li><li><a href="#_label1">二、参数详解</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">参数解析</a></li></ul><li><a href="#_label2">三、相关示例</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_1">示例 1:创建一维数组</a></li><li><a href="#_lab2_2_2">示例 2:创建二维数组</a></li><li><a href="#_lab2_2_3">示例 3:创建三维数组</a></li><li><a href="#_lab2_2_4">示例 4:使用不同的数据类型</a></li></ul><li><a href="#_label3">四、zeros()与empty()的区别</a></li><ul class="second_class_ul"></ul></ul></div><p>NumPy(Numerical Python)是Python科学计算领域的核心库。它提供了强大的多维数组对象,以及用于处理这些数组的工具。在数据科学、机器学习和工程计算中经常需要创建特定形状和数据类型的数组。本文将重点介绍 NumPy 中一个基础且极其重要的函数:<code>numpy.zeros()</code>。</p><p class="maodian"><a name="_label0"></a></p><h2>一、函数简介</h2>
<p><code>numpy.zeros()</code> 函数用于创建一个指定形状(shape)和数据类型(dtype)的新的 NumPy 数组,并用<strong>零</strong>填充该数组的每一个元素。</p>
<p>在需要初始化矩阵或张量、作为累加器的起始值,或在分配内存以供后续计算时,这个函数都非常实用。</p>
<p>📖它和<code>zeros_like()</code>函数的比较见<a href="https://www.jb51.net/python/3512530md.htm" target="_blank">NumPy zeros_like() 函数详解</a><br />官方函数解析<a href="https://numpy.org/doc/stable/reference/generated/numpy.zeros.html" rel="external nofollow" target="_blank">numpy.zeros</a></p>
<p style="text-align:center"><img alt="" height="890" src="https://img.jbzj.com/file_images/article/202601/2026010708342082.jpg" width="956" /></p>
<p class="maodian"><a name="_label1"></a></p><h2>二、参数详解</h2>
<p><code>numpy.zeros()</code> 的基本函数签名如下:</p>
<div class="jb51code"><pre class="brush:py;">numpy.zeros(shape, dtype=float, order='C', *, like=None)
</pre></div>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>参数解析</h3>
<ol><li><strong>shape (必须)</strong>:
<ul><li>定义新数组的维度。</li><li>可以是一个整数(表示一维数组的大小),也可以是一个整数元组(例如 (rows, columns) 表示二维数组,或 (d1, d2, d3) 表示三维数组)。</li></ul></li><li><strong>dtype(可选,默认为 float64)</strong>:<ul><li>定义数组中元素的数据类型,例如 int(整数)、float(浮点数)、complex(复数)等。</li><li>通常使用 np.int32、np.float64 或简单地使用 Python 的 int、float。</li></ul></li><li><strong>order(可选,默认为 'C'):</strong><ul><li>指定数组在内存中的存储顺序。</li><li>'C' 表示行主序(C 语言风格),即最后一个轴变化最快。</li><li>'F' 表示列主序(Fortran 风格),即第一个轴变化最快。</li></ul></li><li><strong>like(可选)</strong>:<ul><li>(NumPy 1.20.0 版本新增)允许创建一个与给定对象具有相同属性(如 shape 和 dtype)的数组,但使用零填充。</li></ul></li></ol>
<p class="maodian"><a name="_label2"></a></p><h2>三、相关示例</h2>
<p class="maodian"><a name="_lab2_2_1"></a></p><h3>示例 1:创建一维数组</h3>
<p>创建一个包含 5 个元素的零数组,默认数据类型为浮点数:</p>
<div class="jb51code"><pre class="brush:py;">import numpy as np
# 创建一个包含 5 个浮点数 0 的一维数组
arr1 = np.zeros(5)
print(arr1)
print(f"数据类型:{arr1.dtype}")
# 输出:
# 数据类型:float64
</pre></div>
<p class="maodian"><a name="_lab2_2_2"></a></p><h3>示例 2:创建二维数组</h3>
<p>创建一个 3 行 4 列的二维数组,并指定数据类型为整数:</p>
<div class="jb51code"><pre class="brush:py;"># 创建一个 3x4 的整数零矩阵
arr2 = np.zeros((3, 4), dtype=int)
print(arr2)
print(f"数据类型:{arr2.dtype}")
# 输出:
# [
#
#]
# 数据类型:int64 (或根据平台可能是 int32)
</pre></div>
<p class="maodian"><a name="_lab2_2_3"></a></p><h3>示例 3:创建三维数组</h3>
<p>创建一个 2x3x2 的三维数组(例如,2 个 3x2 的切片):</p>
<div class="jb51code"><pre class="brush:py;"># 创建一个 2x3x2 的三维数组
arr3 = np.zeros((2, 3, 2))
print(arr3)
print(f"维度:{arr3.shape}")
# 输出:
# [[
#
# ]
#
#[
#
# ]]
# 维度:(2, 3, 2)
</pre></div>
<p class="maodian"><a name="_lab2_2_4"></a></p><h3>示例 4:使用不同的数据类型</h3>
<p>创建包含 32 位浮点数(更节省内存)的数组:</p>
<div class="jb51code"><pre class="brush:py;"># 指定 dtype 为 float32
arr4 = np.zeros((2, 2), dtype=np.float32)
print(arr4)
print(f"数据类型:{arr4.dtype}")
# 数据类型:float32
</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>四、zeros()与empty()的区别</h2>
<p>在 NumPy 中,另一个用于创建新数组的函数是 <code>numpy.empty()</code>。了解两者之间的关键区别至关重要:</p>
<table><thead><tr><th>特性</th><th>numpy.zeros(shape)</th><th>numpy.empty(shape)</th></tr></thead><tbody><tr><td>元素值</td><td>保证所有元素都被初始化为 零。</td><td>元素值是未初始化的(可能包含内存中已有的随机值)。</td></tr><tr><td>速度</td><td>略慢,因为它必须写入所有的零。</td><td>极快,因为它跳过了初始化元素的步骤。</td></tr><tr><td>用途</td><td>需要一个干净、零值数组作为起点时。</td><td>当确定会立即用有意义的值覆盖数组的全部内容时,用于性能优化。</td></tr></tbody></table>
<blockquote><p>除非是在处理对性能极其敏感的场景,并且非常确定会完全覆盖数组,否则通常建议使用 np.zeros(),因为它更安全、更可预测。</p></blockquote>
頁:
[1]