好嘞,朋友们!今天咱们就来聊聊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
: 指定数组的数据类型,比如int
、float
、complex
等等。如果不指定,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()
函数,并在实际应用中灵活运用!记住,编程就像一场冒险,勇敢地去探索吧!🚀
结尾:
好了,今天就到这里,希望大家有所收获!如果有什么问题,欢迎留言讨论!下次再见!👋