`array()` 函数:从 Python 列表到 NumPy 数组的创建

好嘞,朋友们!今天咱们就来聊聊NumPy这个超级厉害的库里的一个“小”函数,但它却像个魔术师一样,能把我们熟悉的Python列表瞬间变成NumPy数组!这就是array()函数!准备好了吗?让我们一起揭开它的神秘面纱!😎

开场白:Python列表,咱们的老朋友!

在Python的世界里,列表就像一个万能的容器,什么都能装,整数、浮点数、字符串,甚至是另一个列表!用起来灵活方便,简直是居家旅行必备良品!

my_list = [1, 2.5, "Hello", [4, 5]]
print(my_list)  # 输出: [1, 2.5, 'Hello', [4, 5]]

但是,当我们需要进行大规模的数值计算,比如矩阵运算、统计分析,列表就有点力不从心了。它就像一个跑车,虽然能跑,但只能装几个人,而且跑长途还费油!这时候,就需要我们的主角——NumPy数组登场了!

第一幕:NumPy数组,数据的钢铁侠!

NumPy,全称Numerical Python,是Python在数值计算领域的一把利剑!它提供了一种叫做NumPy数组的数据结构,这玩意儿可厉害了,就像钢铁侠的战衣,专门为高性能数值计算而生!

NumPy数组有以下几个优点:

  • 效率高! NumPy数组底层是用C语言实现的,运算速度比Python列表快得多,就像火箭和自行车的区别!🚀
  • 存储紧凑! NumPy数组要求所有元素类型相同,可以更有效地利用内存,就像把书整整齐齐地码放在书架上!📚
  • 功能强大! NumPy提供了大量的函数,可以方便地对数组进行各种操作,比如数学运算、统计分析、线性代数等等,就像瑞士军刀一样,啥都能干!🔪

第二幕:array()函数,点石成金的魔法!

array()函数是NumPy库里一个最基础,但也是最重要的函数之一。它的作用就是把Python列表、元组或者其他序列类型的数据,转换成NumPy数组!就像一个魔法师,轻轻挥动魔杖,就把普通石头变成了金子!✨

语法结构:

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0, like=None)

是不是感觉有点眼花缭乱?别怕,咱们一个一个来解释:

  • object: 这是必须的参数,就是你要转换成NumPy数组的那个东西,可以是列表、元组、数组,甚至是可以迭代的对象!
  • dtype: 指定数组的数据类型,比如intfloatcomplex等等。如果不指定,NumPy会根据你的数据自动推断,但最好还是明确指定,避免出现意想不到的错误。
  • copy: 如果设置为True,会创建一个新的数组,并把数据复制过去;如果设置为False,并且object本身就是一个NumPy数组,那么会返回原始数组,不会进行复制。这个参数可以控制内存的使用,是个省钱小能手!💰
  • order: 指定数组在内存中的存储顺序,可以是'C'(行优先)或者'F'(列优先)。一般情况下,我们用默认的'K'就可以了,NumPy会根据情况自动选择最佳的存储顺序。
  • subok: 如果设置为True,允许创建子类数组;如果设置为False,强制返回基类数组。一般情况下,我们用默认的False就可以了。
  • ndmin: 指定数组的最小维度。比如,如果设置为2,即使你的数据是一维的,也会被转换成二维数组。
  • like: 允许创建一个与like对象具有相同数据类型和其他属性的数组。

实战演练:把列表变成数组!

光说不练假把式,咱们来几个例子,看看array()函数是怎么施展魔法的!

例子1:一维数组

import numpy as np

my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
print(my_array)  # 输出: [1 2 3 4 5]
print(type(my_array))  # 输出: <class 'numpy.ndarray'>

看,一个简单的列表,瞬间就变成了NumPy数组!而且,我们可以看到,type()函数告诉我们,my_array的类型是numpy.ndarray,也就是NumPy数组!

例子2:二维数组

my_list = [[1, 2, 3], [4, 5, 6]]
my_array = np.array(my_list)
print(my_array)
# 输出:
# [[1 2 3]
#  [4 5 6]]
print(my_array.shape)  # 输出: (2, 3)

这次,我们用一个嵌套的列表,创建了一个二维数组!my_array.shape可以告诉我们数组的形状,这里是(2, 3),表示这个数组有2行3列。

例子3:指定数据类型

my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list, dtype=float)
print(my_array)  # 输出: [1. 2. 3. 4. 5.]
print(my_array.dtype)  # 输出: float64

通过dtype参数,我们指定了数组的数据类型为float,所以列表中的整数都被转换成了浮点数!

例子4:使用ndmin参数

my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list, ndmin=2)
print(my_array)
# 输出:
# [[1 2 3 4 5]]
print(my_array.shape)  # 输出: (1, 5)

通过ndmin=2,我们强制创建了一个二维数组,即使原始数据是一维的。

高级用法:不仅仅是列表!

array()函数可不只是能转换列表,它还能处理各种各样的数据来源!

  • 元组:
my_tuple = (1, 2, 3, 4, 5)
my_array = np.array(my_tuple)
print(my_array)  # 输出: [1 2 3 4 5]
  • 已有的NumPy数组:
my_array1 = np.array([1, 2, 3])
my_array2 = np.array(my_array1)  # 这里会复制一份新的数组
print(my_array2)  # 输出: [1 2 3]

my_array3 = np.array(my_array1, copy=False) # 这里不会复制,只是引用
my_array1[0] = 10
print(my_array3) #输出: [10  2  3]
  • 迭代器:
my_range = range(10)
my_array = np.array(my_range)
print(my_array)  # 输出: [0 1 2 3 4 5 6 7 8 9]

注意事项:防止踩坑指南!

在使用array()函数的时候,有一些小细节需要注意,避免掉进坑里:

  • 数据类型不一致: 如果你的列表中包含了多种数据类型,NumPy会尝试找到一个通用的类型来表示所有元素。比如,如果列表中既有整数又有浮点数,那么所有元素都会被转换成浮点数。
my_list = [1, 2.5, "Hello"]
my_array = np.array(my_list)
print(my_array)  # 输出: ['1' '2.5' 'Hello']
print(my_array.dtype)  # 输出: <U32  (取决于字符串长度)

在这个例子中,由于列表中包含了字符串,所以所有元素都被转换成了字符串类型。

  • 嵌套列表的维度不一致: 如果你用嵌套列表创建二维数组,要确保每个子列表的长度相同,否则NumPy会创建一个一维数组,其中每个元素都是一个列表!
my_list = [[1, 2, 3], [4, 5]]
my_array = np.array(my_list)
print(my_array)  # 输出: [list([1, 2, 3]) list([4, 5])]
print(my_array.dtype)  # 输出: object
  • 内存占用: 创建大型数组时,要注意内存占用,特别是当copy=True时,会复制一份数据,占用更多的内存。

第三幕:NumPy数组的进阶应用!

有了NumPy数组,我们就可以进行各种各样的数值计算了!这里简单介绍几个常用的操作:

  • 数学运算: NumPy数组支持各种数学运算,比如加减乘除、指数、对数、三角函数等等。
my_array = np.array([1, 2, 3, 4, 5])
print(my_array + 2)  # 输出: [3 4 5 6 7]
print(my_array * 3)  # 输出: [ 3  6  9 12 15]
print(np.sin(my_array)) # 输出: [ 0.84147098  0.90929743  0.14112001 -0.7568025  -0.95892427]
  • 统计分析: NumPy提供了很多统计函数,可以方便地计算数组的均值、方差、标准差、最大值、最小值等等。
my_array = np.array([1, 2, 3, 4, 5])
print(np.mean(my_array))  # 输出: 3.0
print(np.std(my_array))   # 输出: 1.4142135623730951
print(np.max(my_array))  # 输出: 5
  • 线性代数: NumPy的linalg模块提供了线性代数的功能,可以进行矩阵运算、求逆、解方程等等。
my_matrix = np.array([[1, 2], [3, 4]])
print(np.linalg.inv(my_matrix))
# 输出:
# [[-2.   1. ]
#  [ 1.5 -0.5]]

总结:array()函数,NumPy的基石!

array()函数就像NumPy的基石,是我们进入NumPy世界的钥匙!掌握了它,我们就可以轻松地把Python列表和其他数据转换成NumPy数组,然后利用NumPy强大的功能,进行各种各样的数值计算!

希望今天的讲解能帮助大家更好地理解array()函数,并在实际应用中灵活运用!记住,编程就像一场冒险,勇敢地去探索吧!🚀

结尾:

好了,今天就到这里,希望大家有所收获!如果有什么问题,欢迎留言讨论!下次再见!👋

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注