Numpy基础:数组和矢量计算

  1. Numpy本身并没有提供多么高级的数据分析功能,理解Numpy数组以及面向数组的计算将有助于你更加高效地使用诸如pandas之类的工具。

  2. 虽然Numpy提供了大部分数据分析功能的计算基础,但你可能还是想将pandas作为数据分析工作的基础(尤其是对于结构化或表格化数据),因为他提供了能使大部分常见数据任务变得非常简洁的丰富高级接口。pandas还提供了一些Numpy所没有的更加领域特定的功能,如时间序列处理等。

Numpy的ndarray:一种多维数组对象
1. Numpy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。

2.ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)。

3.创建ndarray

3.1. 创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组。
嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组。

3.2. 除了np.array之外,还有一些函数也可以新建数组。zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值。要用这些方法创建多维数组,只需传入一个表示形状的元组即可。(认为np.empty会返回全0数组的想法是不安全的。很多情况下,它返回的都是一些未初始化的垃圾值。)

3.3. arrange是pyhton内置函数range的数组版。

3.4. 可以通过ndarray的astype方法显式地转换其dtype。(调用astype无论如何都会创建一个新的数组(原始数据的一份拷贝),即使新dtype跟老dtype相同也是如此。)

4. 数组和标量之间的运算

4.1. 大小相等的数组之间的任何算术运算都会将运算应用到元素级。同样,数组与标量的算术运算也会将那个标量值传播到各个元素。不同大小的数组之间的运算叫做广播。

5. 基本的索引和切片

5.1. 当你将一个标量值赋值给一个切片时(如arr[5:8]=12),该值会自动传播(也就是后面会讲到的”广播”)到整个选区。跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。(如果你想要得到的是ndarray切片的一份副本而非视图,就需要显式地进行复制操作,例如arr[5:8].copy()。)

5.2. 对于高维度数组,能做的事情更多。在一个二维数组中,各索引位置上的元素不再是标量而是一维数组(你可以传入一个以逗号隔开的索引列表来选取单个元素)。

6. 数组转置和轴对换

6.1. 转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)。数组不仅有transpose方法,还有一个特殊的T属性,在进行矩阵计算时,经常需要用到该操作,比如利用np.dot计算矩阵内积 XTX

利用数组进行数据处理
Numpy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环)。用数组表达式代替循环的做法,通常被称为矢量化

用于数组的文件输入输出

1. 将数组以二进制格式保存到磁盘
1.1. np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的。

1.2. 通过np.savez可以将多个数组保存到一个压缩文件中,将数组以关键字参数的形式传入即可。加载.npz文件时,你会得到一个类似字典的对象,该对象会对各个数组进行延迟加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值