Numpy第1练:7种方法创建一维数组,你会选择哪一个?
<h1>问:如何创建一个 1 维数组?</h1><div class="image-package"><img src="https://img.haomeiwen.com/i16495147/d07a9325f26c3b1c.jpeg" img-data="{"format":"jpeg","size":54879,"width":640,"height":360,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p><span style="font-size:0.882em"><span>创建一维数组是数据处理和科学计算中的基本操作。在Python中,我们可以采用多种不同的方法来实现这一点。以下是五种主流的方法,以及它们各自的优缺点分析:</span></span></p><h1>1. 使用基础Python:列表(List)</h1><p><span style="font-size:0.882em"><strong><span>优点</span></strong><span>:Python原生支持,不需要任何额外的库。列表是动态数组,可以容易地增加、删除或更改元素。</span></span></p><p><span style="font-size:0.882em"><strong><span>缺点</span></strong><span>:性能上不如专门的数组处理库,如NumPy,尤其是在大数据集上操作时。不支持高级的数值计算功能。</span></span></p><div class="image-package"><img src="https://img.haomeiwen.com/i16495147/e67ff17ccd1d6f4e.jpeg" img-data="{"format":"jpeg","size":23282,"width":640,"height":423,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h1>2. 使用NumPy:np.array()</h1><p><span style="font-size:0.882em"><strong><span>优点</span></strong><span>:NumPy是科学计算的标准库,提供了优化的数组操作和广泛的数学函数库。支持向量化操作,性能远超纯Python实现。</span></span></p><p><span style="font-size:0.882em"><strong><span>缺点</span></strong><span>:需要安装外部库。对于非数值计算任务,NumPy的功能可能有些过剩。</span></span></p><div class="image-package"><img src="https://img.haomeiwen.com/i16495147/5a2ec6aa53f35856.jpeg" img-data="{"format":"jpeg","size":10968,"width":640,"height":209,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h1>3. 使用NumPy:np.arange()</h1><p><span style="font-size:0.882em"><strong><span>优点</span></strong><span>:可以快速生成一个数值范围内的数组,用法类似于Python的range(),但直接返回NumPy数组。</span></span></p><p><span style="font-size:0.882em"><strong><span>缺点</span></strong><span>:同样需要安装NumPy库,且只能创建数值连续的数组,不适用于创建自定义序列。</span></span></p><div class="image-package"><img src="https://img.haomeiwen.com/i16495147/a83d1ad21056feff.jpeg" img-data="{"format":"jpeg","size":19059,"width":640,"height":313,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h1>题外话:Python的list和numpy的数组有什么区别?</h1><ol><li><span style="font-size:0.882em"><strong><span>Python列表</span></strong><span>:提供基本的序列操作,如追加(append)、扩展(extend)、插入(insert)等。</span></span></li><li><span style="font-size:0.882em"><strong><span>NumPy数组</span></strong><span>:提供大量的数学和科学计算方法,如矩阵运算、统计分析、傅立叶变换等。</span></span></li></ol><p><span style="font-size:0.882em"><strong><span>内存占用</span></strong></span></p><ol><li><span style="font-size:0.882em"><strong><span>Python列表</span></strong><span>:因为列表是对象的集合,每个对象都有自己的类型信息、引用计数和其他信息,所以列表比NumPy数组占用更多内存。</span></span></li><li><span style="font-size:0.882em"><strong><span>NumPy数组</span></strong><span>:由于类型相同且紧凑存储,通常占用更少的内存。</span></span></li></ol><p><span style="font-size:0.882em"><strong><span>用途</span></strong></span></p><ol><li><span style="font-size:0.882em"><strong><span>Python列表</span></strong><span>:适用于通用编程,特别是当你需要一个可以包含不同类型元素的动态数组时。</span></span></li><li><span style="font-size:0.882em"><strong><span>NumPy数组</span></strong><span>:适用于需要进行大量数值计算的场景,特别是在数据分析、机器学习、科学计算等领域。</span></span></li></ol><h1>4. 使用NumPy:np.linspace()</h1><p><span style="font-size:0.882em"><strong><span>优点</span></strong><span>:可以创建在指定的区间内均匀分布的数值数组,适合数值分析和图形表示。</span></span></p><p><span style="font-size:0.882em"><strong><span>缺点</span></strong><span>:需要NumPy库,且功能专一,主要用于生成线性间隔的数值点。</span></span></p><div class="image-package"><img src="https://img.haomeiwen.com/i16495147/628a823b55013ded.jpeg" img-data="{"format":"jpeg","size":15651,"width":640,"height":215,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h1>5. 使用Pandas:pd.Series()</h1><p><span style="font-size:0.882em"><strong><span>优点</span></strong><span>:Pandas是处理表格数据的强大工具,Series对象不仅可以存储数值,还可以有自己的标签(index),适合于时间序列等应用。</span></span></p><p><span style="font-size:0.882em"><strong><span>缺点</span></strong><span>:Pandas库比NumPy更为庞大,对于简单的一维数组来说,其功能可能过于复杂。</span></span></p><div class="image-package"><img src="https://img.haomeiwen.com/i16495147/967235a6726ab787.jpeg" img-data="{"format":"jpeg","size":13156,"width":640,"height":400,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h1>题外话:Numpy的数组和Pandas的Series有什么区别?</h1><p><span style="font-size:0.882em"><span>Pandas的Series和NumPy的数组(numpy.ndarray)是Python数据分析中常用的两种数据结构,它们都能够存储数据序列,但设计理念、功能特性及用途存在明显差异。以下是它们之间的一些主要区别:</span></span></p><p><span style="font-size:0.882em"><strong>数据类型和结构</strong></span></p><ol><li><span style="font-size:0.882em"><strong><span>NumPy数组</span></strong><span>:通常存储单一数据类型的元素。它是一个多维数组,提供快速的向量化数值计算功能。</span></span></li><li><span style="font-size:0.882em"><strong><span>Pandas Series</span></strong><span>:可以看作是带有标签的一维数组。Series可以存储不同类型的数据(整数、字符串、浮点数等),每个元素都有一个唯一的标签(索引)。</span></span></li></ol><p><span style="font-size:0.882em"><strong>性能</strong></span></p><ol><li><span style="font-size:0.882em"><strong><span>NumPy数组</span></strong><span>:在进行大规模数值计算时表现出极高的效率,特别是在数组操作和数学函数应用方面。</span></span></li><li><span style="font-size:0.882em"><strong><span>Pandas Series</span></strong><span>:虽然在性能上优于Python原生列表,但在处理大规模数据时通常比NumPy数组慢。不过,Series提供的高级索引功能可以方便地进行数据查询和处理。</span></span></li></ol><p><span style="font-size:0.882em"><strong>功能和用途</strong></span></p><ol><li><span style="font-size:0.882em"><strong><span>NumPy数组</span></strong><span>:适合进行科学计算和数值分析,如线性代数运算、统计分析等。NumPy库提供了丰富的数值计算方法。</span></span></li><li><span style="font-size:0.882em"><strong><span>Pandas Series</span></strong><span>:设计用于处理结构化数据,支持复杂的数据操作,如数据对齐、缺失数据处理、时间序列功能等。Series非常适合数据清洗、数据探索及统计分析等任务。</span></span></li></ol><p><span style="font-size:0.882em"><strong>索引</strong></span></p><ol><li><span style="font-size:0.882em"><strong><span>NumPy数组</span></strong><span>:使用基于位置的默认整数索引,也可以执行布尔索引等高级索引操作。</span></span></li><li><span style="font-size:0.882em"><strong><span>Pandas Series</span></strong><span>:每个元素都有一个标签(索引),这些索引可以是整数也可以是字符串(或其他Python对象),使得数据操作更加直观和灵活。</span></span></li></ol><p><span style="font-size:0.882em"><strong>内存占用</strong></span></p><ol><li><span style="font-size:0.882em"><strong><span>NumPy数组</span></strong><span>:由于存储的是同质数据类型,通常占用内存较小。</span></span></li><li><span style="font-size:0.882em"><strong><span>Pandas Series</span></strong><span>:由于存储了额外的索引信息,以及支持不同数据类型,因此可能占用更多的内存。</span></span></li></ol><p><span style="font-size:0.882em"><strong>用途差异</strong></span></p><ol><li><span style="font-size:0.882em"><strong><span>NumPy数组</span></strong><span>:更适合进行科学计算和技术计算,尤其是需要高性能计算的场景。</span></span></li><li><span style="font-size:0.882em"><strong><span>Pandas Series</span></strong><span>:由于其灵活的数据处理能力,更适合数据分析、数据探索和统计分析等任务,特别是在处理实际问题中的结构化数据时。</span></span></li></ol><h1>6.使用列表推导式</h1><p><span style="font-size:0.882em"><strong><span>优点</span></strong><span>:列表推导式是Python的语法糖,允许以一种直观、清晰的方式创建列表,非常适合从其他列表或可迭代对象生成新列表,特别是当你需要对每个元素应用某种操作时。</span></span></p><p><span style="font-size:0.882em"><strong><span>缺点</span></strong><span>:对于非常大的数据集,列表推导式可能会消耗大量内存,并且对性能有负面影响。此外,复杂的列表推导式可能难以阅读和维护。</span></span></p><div class="image-package"><img src="https://img.haomeiwen.com/i16495147/1846ca3dc062bcc3.jpeg" img-data="{"format":"jpeg","size":13081,"width":640,"height":201,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h1>7.使用运算符</h1><p><span style="font-size:0.882em"><strong><span>优点</span></strong><span>:非常适合快速初始化一个具有固定数值或对象的列表。这种方法简洁明了,可以迅速得到一个大小固定的数组。</span></span></p><p><span style="font-size:0.882em"><strong><span>缺点</span></strong><span>:仅限于创建包含重复元素的列表。如果你需要初始化一个由唯一、动态计算出的元素组成的数组,这种方法就不合适了。此外,使用运算符复制的是对象的引用,而不是对象本身,这在使用可变对象时可能会导致不期望的行为。</span></span></p><div class="image-package"><img src="https://img.haomeiwen.com/i16495147/1d172e6b2fbd8ae0.jpeg" img-data="{"format":"jpeg","size":22867,"width":640,"height":336,"space":"srgb","channels":3,"depth":"uchar","density":72,"chromaSubsampling":"4:2:0","isProgressive":false,"hasProfile":false,"hasAlpha":false}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><blockquote><p>以上便是常用的创建一维数组的七种方式,每一种方式都有一个专门的适用场景,这也是它们存在的意义,希望这篇小小的汇总能够帮助到各路大神!</p></blockquote>