常见方法
命令 | 说明 |
---|---|
np.array(序列, [dtype=float64]) | 创建ndarray |
ndarray.shape | 返回各个维度的维数 |
ndarray.dtype | 返回数组元素的数据类型 |
np.nrange(n) | 创建ndarray |
ndarray.astype(np.float64) | 动态转换dtype,调用astype会对原始数据进行拷贝 |
np.arange(20).reshape(4,5) | reshape(维度的维数),动态生成多维数组 |
ndarray.ndim | 返回数组的维数 |
ndarray.copy() | 返回数组的副本 |
切片
-
原始数据视图
标量赋值给切片,该值会自动广播到整个选区.
arr = np.arange(10) arr10[:2] = 12 print(arr) # [12 12 2 3 4 5 6 7 8 9]
数组切片是原始数组视图, 视图上任何修改都会反映到原始数组. arr[:2].copy() 会得到数组的副本而非视图.
arr_slice = arr[:2] arr_slice[1] = 12345 print(arr, arr_slice) # [ 12 12345 2 3 4 5 6 7 8 9] [ 12 12345 ]
-
索引切片
通过索引切片选取数组中的数据,不会创建数据的副本,修改索引切片,原始数组也会发生改变.
-
布尔型索引
names = np.array([‘Bob’,‘Joe’,‘Will’,‘Bob’,‘Will’,‘Joe’,‘Joe’])
data = np.arange(28).reshape(7,4)等于:
不等于:
组合条件:&、|
通过布尔型数组设置值:
通过布尔型选取数组中的数据,总是创建数据的副本.
-
花式索引
总是将数据复制到新数组中.
指的是利用整数数组进行索引.
以特定的顺序选取子集:
两个一维整数数组选取方形区域的索引:
数组转置和轴对换
转置返回源数据的视图(不会进行任何复制操作).
数组不仅有transpose方法,还有一个特殊的T属性:
二维数组:就是简单的0轴和1轴互换:
高维数组,transpose需要得到一个由轴编号组成的元组:
a) 简单的0轴和1轴交换
原始arr维度为(2,3,4),因此0轴和1轴交换,变为(3,2,4),3个2x4的二维数组.
规律:将每个小数组进行拆分,从第二行开始,每一行形成单独一个元组的第一行.
b) 简单的1轴和2轴交换
原始arr维度为(2,3,4),因此1轴和2轴交换,变为(2,3,4),元组个数不会改变.
规律:只是小数组内部轴变换.
c) 简单的0轴和2轴交换
这个比较复杂,0轴和2轴交换,不仅小数组个数变化,而且小数组元素也发生变化
规律:一般需要将第一个小数组轴转换,分成2轴个数个小数组,然后再将其他的合并过来.
通用函数
通用函数是一种对ndarray中的数据执行元素级运算的函数.
一元ufunc:
二元ufunc:
利用数组进行数据处理
numpy数组可以将数据处理任务表述为简洁的数组表达式(否则需要编写循环)。用数组表达式代替循环做法,称为矢量化.