Python进阶06_除了列表,还有谁谁谁

除了列表,还有谁谁谁

数组

何时使用数组:需要一个只包含数字的列表;
数组可以做什么:

  • 支持所有跟可变序列有关的操作,包括 .pop、.insert 和 .extend
  • 提供从文件读取和存入文件的更快的方法,如 .frombytes 和 .tofile

如何创建数组

  • 创建数组需要一个类型码,这个类型码用来表示在底层的 C 语言应该存放怎样的数据类型。
  • b 类型码代表的是有符号的字符

数组的读取和写入:
array.tofile 和 array.fromfile 用起来很简单,它的速度也很快。

#从创建一个有 1000 万个随机浮点数的数组
from array import array
from random import random

floats = array('d',(random() for i in range(10**7)))

print(floats[-1])
print(len(floats))
0.275005837260377
10000000
# 写入文件数组
fp = open('floats.bin','wb')
# 把数组存入一个二进制文件里
floats.tofile(fp)
fp.close()

# 读取文件数组
floats2 = array('d')
fp = open('floats.bin','rb')
# 把 1000 万个浮点数从二进制文件里读取出来
floats2.fromfile(fp,10**7)
fp.close()
print(floats2[-1])
print(floats == floats2)
0.275005837260377
True

列表和数组的属性和方法

列表和数组的属性和方法对比
列表和数组的属性和方法对比

内存视图

memoryview 是一个内置类,它能让用户在不复制内容的情况下操作同一个数组的不同切片。在数据结构之间共享内存。
memoryview.cast 的概念跟数组模块类似,能用不同的方式读写同一块内存数据,而且内容字节不会随意移动。

import array

numbers = array.array('h',[-2,-1,0,1,2])
# memv 里的 5 个元素跟数组里的没有区别
memv = memoryview(numbers)
# 显示地址
print(memv)
print(len(memv))
print(memv[0],memv[1])
print(memv.tolist())

#把 memv 里的内容转换成 'B' 类型,也就是无符号字符
memv_oct = memv.cast('B')
print(memv_oct.tolist())
# 把位于位置 5 的字节赋值成 4
memv_oct[5] = 4
#占 2 个字节的整数的高位字节改成了 4
print(numbers)

5
-2 -1
[-2, -1, 0, 1, 2]
[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
array('h', [-2, -1, 1024, 1, 2])

NumPy和SciPy

NumPy 和 SciPy不是标准的Python库,是第三方的库。它们提供的高阶数组和矩阵操作。正是有了这么强大的第三方库,让Python 成为科学计算应用的主流语言。Python的灵活强大也就是基于很多丰富的第三方库。

Numpy: 实现了多维同质数组(homogeneous array)和矩阵
Scipy: SciPy 是基于 NumPy 的另一个库,它提供了很多跟科学计算有关的算法,专为线性代数、数值积分和统计学而设计。

import numpy as np
a = np.arange(12)
print(a)
print(type(a))
print(a.shape)
a.shape = 3,4
print(a)
print(a.shape)
print(a[1])
print(a[:,1])

[ 0  1  2  3  4  5  6  7  8  9 10 11]

(12,)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
(3, 4)
[4 5 6 7]
[1 5 9]

分享关于人工智能,机器学习,深度学习以及计算机视觉的好文章,同时自己对于这个领域学习心得笔记。想要一起深入学习人工智能的小伙伴一起结伴学习吧!扫码上车!

瓦力人工智能 - 扫码上车

你可能感兴趣的:(Python进阶06_除了列表,还有谁谁谁)