NumPy的ndarray: 一种多维数组对象
Numpy最重要的一个特点就是其N维数组对象(ndarray),该对象是一个快速灵活的大数据集容器.你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样:
In[1]:data
Out[1]:
array([[0.1, 0.2],
[0.3, 0.4]])
In[2]:data * 10
Out[2]:
array([[1, 2],
[3, 4]])
ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元祖)和一个dtype(一个用于说明数组数据类型的对象):
data.shape // (2, 3)
data.dtype // dtype('float64')
- 创建ndarray
import numpy as np
data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
data2 = [[1,2, 3, 4], [5, 6, 7,8]]
arr2 = np.array(data2)
arr2.ndim // 2 维度
arr2.shape // (2, 4)
arr1.dtype //dtype('float64')
arr2.dtype // dtype('int64')
函数 | 说明 |
---|---|
array | 将输入数据(列表、元祖、数组或其他序列类型) 转换为ndarray。要么推断出dtype,要么显示指定dtype.默认直接复制输入数据.(浅拷贝) |
ararray | 将输入转换为ndarray,如果输入本身就是一个ndarray将不进行复制(直接引用对象本身) |
arange | 类似于内置的range,但返回的是一个ndarray而不是列表 |
ones, ones_like | 根据指定的形状或dtype创建一个全1数组。ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组. |
zeros、zeros_like | 类似于ones和ones_like,只不过产生的是全0的数组 |
empty、empty_like | 创建新数组,只分配内存空间但不填充任何值(垃圾值) |
eye, identity | 创建一个正方的NxN单位矩阵(对角线为1,其余为0) |
2.ndarray的数据类型
import numpy as np
arr1 = np.array([1, 2, 3]. dtype=np.float64)
arr2 = np.array([1, 2, 3], dtype=np.int32)
np的数据类型只要有
类型 | 类型代码 | 说明 |
---|---|---|
int8, uint8 | i1 u1 | |
int16 uint16 | i2 u2 | |
int32 uint32 | i4 u4 | |
int64 unint64 | i8 u8 | |
float16 | f2 | |
float32 | f4或f | |
float64 | f8或d | |
float128 | f16或g | |
complex64 complex128 complex 256 | c8 c16 c32 | |
bool | ? | |
object | O | python对象类型 |
string_ | S | 固定长度的字符串类型(每个字符一个字节) 列如,要创建一个长度为10的字符串 应使用S10 |
unicode_ | U | 固定长度的unicode类型,跟字符串的定义方式一样 |
arr = np.array([3,7, -1,2, -2.6, 0.5, 12.9, 10.1])
arr.astype(np.int32)// array([3, -1, -2, 0, 12, 10])
3.数组的运算
数组与标量之间的运算
arr = np.array([[1., 2., 3.], [4., 5., 6.]])
arr * arr // array([[1., 4., 9.], [16., 25., 36.]])
1 / arr // array([[1., 0.5, 0.333], [-.25. 0.2, 0.1667]])
arr * 2 // array([[2., 4., 6.], [8., 10., 12.]])
4.基本的索引和切片
arr = np.arange(10)
arr[5] // 5
arr[5:8] // array([5, 6, 7])
arr[5: 8] = 12 // array([0, 1, 2, 3, 4, 12, 12, 12, 8, 9])