python Numpy基础(多维数组对象)
一、Numpy初体验
- 生成随机数组
import numpy as np #导入Numpy模块
#生成随机数组
data = np.random.randn(2,2)#定义生成为2行2列的二维数组
data
#输出array的2行2列的多维数组
array([[-1.13431267, 0.62352469],
[-0.63744491, -0.26528683]])
- 然后给data加上一个数学操作:
#所有的元素同时都乘以10
data * 10
array([[-11.34312675, 6.23524693],
[ -6.37444905, -2.65286835]])
#对应元素进行了相加
data + data
rray([[-2.26862535, 1.24704939],
[-1.27488981, -0.53057367]])
- 查看数组的数据类型
#shape用来描述数组每一维度的数量
data.shape
#说明data是一个2行2列的多维数组
(2,2)
#dtype用来描述数组的数据类型
data.dtype
#float64 标准的双精度浮点数
dtype('float64')
每一个数组都有一个shape属性和dtype属性
二、生成nadarray,进行数组关系运算
- 生成nadarray
生成数组最简单的方式是使用array函数
- 例:
data1 = [1,2.5,5,4,3]
arr1 = np.array(data1)
arr1
array([1. , 2.5, 5. , 4. , 3. ])
#观察发现 除了浮点数 其他的元素都默认在后面生成了一个 . 都变成了一个浮点数
#嵌套序列,如果长度相同,会自动转换成多维数组
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.arrary(data2)
arr2
array([[1,2,3,4],[5,6,7,8]])
- 数组运算
arr = np.array([[1.,2.,3.],[4.,5.,6.]])
#相乘
arr * arr
array([[ 1., 4., 9.],[16., 25., 36.]])
#相减
arr - arr
array([[0., 0., 0.],[0., 0., 0.]])
#相除
2 / arr
array([[2. , 1. , 0.66666667],
[0.5 , 0.4 , 0.33333333]])
#幂运算
arr ** 2
array([[ 1., 4., 9.],[16., 25., 36.]])
三、索引、切片
一维数组的索引和切片和Python非常相似,有Python基础的话很容易理解
- 一维数组的操作
#arange 和 Python中的range()等同
arr = np.arange(10)
arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#索引第一个元素
arr[0]
0
#切出 下标为3 到 5的元素,因为和range等同,所以也是为左闭右开 arr([a:b]) -> a 至 b-1
arr[3:6]
array([3,4,5])
#将下标为3 到 5的元素位置的元素修改为10
arr[3:6] = 10
arr
array([ 0, 1, 2, 10, 10, 10, 6, 7, 8, 9])
#当然也可以单个更改
arr[0] = 200
arr
array([200, 1, 2, 10, 10, 10, 6, 7, 8, 9])
2.二维数组的操作
在一个二维数组中,每个索引值对应的元素不再是一个值 而是一个一维数组
#和Python基础中 其实大同小异
arr2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2[0]
array([1,2,3])
#单个元素可以通过递归的方式获取
#方法一
arr2[0][2] #在arr2中获取第一个列表[1,2,3]再从在中获取下标为2的元素
3
#方法二
arr2[0,2] #在arr2中获取第一个列表[1,2,3]再从在中获取下标为2的元素
3
arr3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
arr3
array([[[1,2,3],[4,5,6]],
[[7,8,9],[10,11,12]]])
#因为arr3是一个两行三列的数组 所以第一个是([1,2,3],[4,5,6])
arr3[0]
array([1,2,3],
[4,5,6])
#复制arr3[0]的值给data_value
data_value = arr3[0].copy()
#将第一位的所有元素的值更改为42
arr3[0]=42
array([[[42,42,42],[42,42,42]],[[7,8,9],[10,11,12]]])
#将data_value重新赋值给arr3[0]
arr3 [0] = data_value
arr3
array([[[1,2,3],[4,5,6]],
[[7,8,9],[10,11,12]]])
#类似的 arr3[1,0]返回的是一个一维数组
arr3[1,0]
array([7,8,9])
注:本文章皆参考<<利用python进行数据分析>>第二版