说明:本文会结合Python中的list和numpy对比讲解
1.numpy的安装:pip install numpy
2.打开命令窗口,启动jupyter:jupyter notebook
3.创建一个新的notebook
4.导入numpy,查看其版本信息
import numpy as np
np.__version__
5.list可存放多种数据类型
li = list(range(10))
li
#结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
获取list中的元素list[3]
修改list中的元素 list[3] = 33
li[3] = 33
li
结果:[0, 1, 2, 33, 4, 5, 6, 7, 8, 9]
将数字类型改成字符串类型 list[3] = "hello python!"
li[3] = "hello python!"
li
结果:[0, 1, 2, 'hello python!', 4, 5, 6, 7, 8, 9]
6.python中的array只能存放一种数据类型,i表示整形,f表示浮点型
import array
arr = array.array('i',list(range(10)))
arr
结果:array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr1 = array.array('f',list(range(10)))
arr1
结果:array('f', [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0])
7.修改其中一个元素为字符串,则会报错,比如arr[5] = 'hello python'
8.使用numpy中的array创建数据,直接传入一个初始化列表,不需要指定数据类型
nparr = np.array(list(range(10)))
nparr
结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
查看nparrr的数据类型:type(nparr)
9.可通过nparr[索引]取值,修改值
nparr[3]
结果:3
nparr[3] = 33
nparr
结果:array([ 0, 1, 2, 33, 4, 5, 6, 7, 8, 9])
10. 将某个值改成字符串会报错,如果改成浮点数,则会保存成功,但小数点会自动截取掉
npaar[5] = 'hello'
结果:报错ValueError: invalid literal for int() with base 10: 'hello'
nparr[5] = 55.8
nparr
结果:array([ 0, 1, 2, 33, 4, 55, 6, 7, 8, 9])
查看nparr中的数据类型nparr.dtype
11.初始化一个浮点数列表,可在最后一个数后面加上一个 .0
nparr2 = np.array([1,2,3.0])
nparr2
结果:array([1., 2., 3.])
查看array中的数据类型
nparr2.dtype
结果:dtype('float64')
12.也可以使用dtype指定数据类型
nparr3 = np.array([1,2,3],dtype=float)
nparr3
结果:array([1., 2., 3.])
nparr3.dtype
结果:dtype('float64')
13.python中的列表和numpy进行对比
python中的列表,定义一个方法
def python_test(n):
a = [i**2 for i in range(n)]
b = [i**3 for i in range(n)]
c = []
for i in range(n):
c.append(a[i] + b[i])
return c
传入一个参数:
python_test(10)
运行结果:[0, 2, 12, 36, 80, 150, 252, 392, 576, 810]
numpy 定义一个方法
def numpy_test(n):
a = np.arange(n) ** 2
b = np.arange(n) ** 3
c = a+b
return c
传入一个参数:
numpy_test(10)
结果:array([ 0, 2, 12, 36, 80, 150, 252, 392, 576, 810], dtype=int32)
传入两个比较大得数字,对比两个方法的性能:
%time res = python_test(10000000)
结果:Wall time: 21.3 s
%time res = numpy_test(10000000)
结果:Wall time: 494 ms
总结:1.a = np.arange(10) 等同于 a = np.array(list(range(10))) 等同于 a = np.array(range(10))
2. np中的array乘以一个整数n的时候,是里面每个元素乘以这个整数n,而列表是将所有元素复制n遍