- NumPy最重要的一个特点是其 N维数组对象 ndarray,该对象是一个快速而灵活的大数据集容器。
- 其中所有元素必须是相同类型的
- 每个数组都有一个shape(表示各维度大小的元组)和一个dtype(表明数组数据类型)
一.创建 nbarray
1.使用array函数,接受一切序列对象
data1 = [6,7.5,8,0,1]
arr1 = np.array(data1)
print (arr1)
2. 嵌套序列,也会被转换为一个多维数组
data2 = [[1,2,3,4], [5,6,7,8]]
arr2 = np.array(data2)
print (arr2)
3. zeros和ones创建指定长度或形状全0或全1数组
z1 = np.zeros(10)
print(z1)
4. 使用np内置函数arange
a1 = np.arange(15)
print(a1)
二. ndarray的数据类型
1. dtype, 默认是float64类型
arr1 = np.array([1,2,3],dtype=np.int32)
print(arr1.dtype)
2. 显式类型转换,astype()
arr = np.array([1,2,3,4,5])
print (arr.dtype)
#整数转成浮点数
float_arr = arr.astype(np.float64)
print (float_arr.dtype)
三. 数组和标量之间的运算
arr = np.array([[1,2,3],[4,5,6]])
arr * arr
arr - arr
1 / arr
arr ** 0.5
四.基本的索引和切片
1.一组数组
arr = np.arange(10)
#索引
arr[5]
#5
#切片
arr[5:8]
#[5,6,7]
#对切片赋值
arr[5:8]=12
#[0,1,2,3,4,12,12,12,8,9]
跟列表最重要的区别在于:数据不会被复制,直接反映的是源数组
#把一个切片赋值给一个变量,对这个变量改值,会影响到原始数据
arr_slice = arr[5:8]
arr_slice[1] = 12345
print (arr)
#[0,1,2,3,4,12,12345,12,8,9]
2. 对于高维度数组
高维度索引,返回低一层级
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2d[2]
#返回一个一维数据,array([7,8,9])表,返回单个元素
arr2d[0][2]
#3
#这两种表示方式是一样的
arr2d[0,2]
#3
切片索引
#一维对象
arr[1:6]
#array([1,2,3,4,64])
#二维对象
arr2d
#array([[1,2,3],
[4,5,6],
[7,8,9]])
#沿第0轴切片,也就是X轴
arr2d[:2]
#array([[1,2,3],
[4,5,6]])
#沿第X轴,Y轴切片
arr2d[:2, 1:]
#array([[2,3],
[5,6]])
五. 布尔型索引
names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])
#正态分布的随机数据,7x4
data = randn(7,4)
names == 'Bob'
#将会产生一个布尔型数组:
#array([True,False,False,True,False,FalseFalse])
这个布尔型数组,可用于数组索引
data[names == 'Bob']
布尔型数组的长度必须跟被索引的轴长度一致
除‘Bob’以外,即可以用(!=)也可以用负号(-)
data[-(names == 'Bob')]
data[names != 'Bob']
六. 花式索引
利用整数数组进行索引
array([[0,0,0,0],
[1,1,1,1],
[2,2,2,2],
[3,3,3,3],
[4,4,4,4],
[5,5,5,5],
[6,6,6,6],
[7,7,7,7]])
为了以特定顺序选取行子集,只需传入一个用于指定顺序的整数列表即可:
arr[[4,3,0,6]]
#array([[4,4,4,4],
[3,3,3,3],
[0,0,0,0],
[6,6,6,6]])
七. 数组转置和轴对换
1. T 属性
arr = np.arange(15).reshape(3,5)
print(arr)
print(arr.T)
2. 计算矩阵内积,XX
arr = np.random.randn(6,3)
np.dot(arr.T, arr)