Numpy数组和列表list的区别

参考:Numpy Array vs List

在Python编程中,列表(list)和Numpy数组(numpy array)是两种常见的数据结构,它们都可以用来存储多个元素。但是它们在实际使用中有很大的区别,本文将详细比较Numpy数组和列表list的特点,以帮助读者了解何时应该选择哪种数据结构。

更多技术文章,全网首发公众号 “极客钛” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

创建方式

首先,让我们来看看如何创建列表和Numpy数组。

创建列表

my_list = [1, 2, 3, 4, 5]
print(my_list)

执行代码结果:
在这里插入图片描述

创建numpy数组

import numpy as np

my_array = np.array([1, 2, 3, 4, 5])
print(my_array)

执行代码结果:

在这里插入图片描述

运行以上代码,我们可以看到列表和Numpy数组的创建方式。列表使用方括号[],而Numpy数组需要引入numpy库并使用np.array()函数。

类型和性能

列表和Numpy数组的一个重要区别在于它们的类型和性能。Numpy数组是由C语言编写,所以在执行数学运算时非常高效。而列表是Python的内置数据类型,性能通常较Numpy数组差。

让我们来进行一个性能对比测试,计算100万个元素的平方和。

使用列表

import time

my_list = list(range(1000000))

start_time = time.time()
sum_of_squares = sum([x**2 for x in my_list])
end_time = time.time()

print("使用list计算平方和:", sum_of_squares)
print("使用list时间:", end_time - start_time, "seconds")

代码执行结果:

在这里插入图片描述

使用numpy数组

my_array = np.array(range(1000000))

start_time = time.time()
sum_of_squares = np.sum(my_array**2)
end_time = time.time()

print("使用Numpy计算平方和:", sum_of_squares)
print("使用Numpy时间:", end_time - start_time, "seconds")

代码执行结果:

在这里插入图片描述

通过运行以上代码,我们可以看到Numpy数组在执行数学运算时的性能明显优于列表。

索引和切片

在访问和操作元素时,Numpy数组和列表也有一些区别。

索引和切片列表

my_list = [1, 2, 3, 4, 5]
print(my_list[0])  # 输出第一个元素
print(my_list[-1])  # 输出最后一个元素
print(my_list[1:3])  # 输出第二个到第三个元素

代码执行结果:

在这里插入图片描述

索引和切片Numpy数组

my_array = np.array([1, 2, 3, 4, 5])
print(my_array[0])  # 输出第一个元素
print(my_array[-1])  # 输出最后一个元素
print(my_array[1:3])  # 输出第二个到第三个元素

代码执行结果:
在这里插入图片描述

Numpy数组和列表的索引和切片方式基本相同,但Numpy数组支持更多高级的索引方式,如布尔索引和花式索引。

广播操作

Numpy数组支持广播操作,可以对不同维度的数组进行数学运算,而列表则不支持。

array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([1, 2])

result = array1 + array2
print(result)

代码执行结果:

在这里插入图片描述

在上面的例子中,我们对一个二维数组和一个一维数组进行了相加操作,Numpy数组会自动对一维数组进行广播操作,实现了元素对应相加的功能。

总结

总的来说,Numpy数组在处理数学运算和大数据集时更高效,而列表更适合一般的数据存储和操作。在选择数据结构时,可以根据具体需求来决定使用列表还是Numpy数组。

更多技术文章,全网首发公众号 “极客钛” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客之昂-钛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值