简介
NumPy一个非常重要的作用就是可以进行多维数组的操作,多维数组对象也叫做ndarray。我们可以在ndarray的基础上进行一系列复杂的数学运算。
本文将会介绍一些基本常见的ndarray操作,大家可以在数据分析中使用。
创建ndarray
创建ndarray有很多种方法,我们可以使用np.random来随机生成数据:
import numpy as np # Generate some random data data = np.random.randn(2, 3) data
array([[ 0.0929, 0.2817, 0.769 ], [ 1.2464, 1.0072, -1.2962]])
除了随机创建之外,还可以从list中创建:
data1 = [6, 7.5, 8, 0, 1] arr1 = np.array(data1) array([6. , 7.5, 8. , 0. , 1. ])
从list中创建多维数组:
data2 = [[1, 2, 3, 4], [5<i>本文来源gaodai$ma#com搞$$代**码)网@</i>, 6, 7, 8]] arr2 = np.array(data2) array([[1, 2, 3, 4], [5, 6, 7, 8]])
使用np.zeros创建初始值为0的数组:
np.zeros(10) array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
创建2维数组:
np.zeros((3, 6)) array([[0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.]])
使用empty创建3维数组:
np.empty((2, 3, 2)) array([[[0., 0.], [0., 0.], [0., 0.]], [[0., 0.], [0., 0.], [0., 0.]]])
注意,这里我们看到empty创建的数组值为0,其实并不是一定的,empty会从内存中随机挑选空间来返回,并不能保证这些空间中没有值。所以我们在使用empty创建数组之后,在使用之前,还要记得初始化他们。
使用arange创建范围类的数组:
np.arange(15) array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
指定数组中元素的dtype:
arr1 = np.array([1, 2, 3], dtype=np.float64) arr2 = np.array([1, 2, 3], dtype=np.int32)
ndarray的属性
可以通过data.shape获得数组的形状。
data.shape (2, 3)
通过ndim获取维数信息:
arr2.ndim 2
可以通过data.dtype获得具体的数据类型。
data.dtype dtype('float64')
ndarray中元素的类型转换
在创建好一个类型的ndarray之后,还可以对其进行转换:
arr = np.array([1, 2, 3, 4, 5]) arr.dtype dtype('int64') float_arr = arr.astype(np.float64) float_arr.dtype dtype('float64')
上面我们使用astype将int64类型的ndarray转换成了float64类型的。
如果转换类型的范围不匹配,则会自动进行截断操作:
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], dtype=int32)
注意,这里是把小数截断,并没有向上或者向下取整。
ndarray的数学运算
数组可以和常量进行运算,也可以和数组进行运算:
arr = np.array([[1., 2., 3.], [4., 5., 6.]]) arr * arr array([[ 1., 4., 9.], [16., 25., 36.]]) arr + 10 array([[11., 12., 13.], [14., 15., 16.]]) arr - arr array([[0., 0., 0.], [0., 0., 0.]]) 1 / arr array([[1. , 0.5 , 0.3333], [0.25 , 0.2 , 0.1667]]) arr ** 0.5 array([[1. , 1.4142, 1.7321], [2. , 2.2361, 2.4495]])