arr1=np.arange(4)
print(arr1)
[0, 1, 2, 3]
arr2=arr1*2 print(arr2)
[0 2 4 6]
my_list=list(arr1)
my_list1=my_list*2 print(my_list1)
[0, 1, 2, 3, 0, 1, 2, 3]
my_list2=[x*2 for x in my_list] print(my_list2)
[0, 2, 4, 6]
NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。
data=np.random.randn(2,3) print(data) print(data*3) print(data+data)
[[ 0.53023545 0.13286423 -0.75920799]
[-0.28459563 -0.32940274 0.1573478 ]]
[[ 1.59070636 0.39859269 -2.27762398]
[-0.85378689 -0.98820822 0.47204341]]
[[ 1.06047091 0.26572846 -1.51841599]
[-0.56919126 -0.65880548 0.31469561]]
ndarray所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象):
print(data.shape) print(data.dtype)
(2, 3)
float64
创建ndarray的方法:
最简单的办法就是使用array函数
data1=[1,2,3] data2=np.array(data1) print(data2)
[1 2 3]
print(data2.ndim)#返回维度
除非特别说明,np.array会尝试为新建的这个数组推断出一个较为合适的数据类型
除np.array之外,还有一些函数也可以新建数组。比如,zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值的数组。要用这些方法创建多维数组,只需传入一个表示形状的元组即可
print(np.zeros(8)) print(np.ones((3,4))) print(np.empty((2,3,2)))
[0. 0. 0. 0. 0. 0. 0. 0.]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[[1. 1.]
[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]
[1. 1.]]]
注意:认为np.empty会返回全0数组的想法是不安全的。很多情况下,它返回的都是一些未初始化的垃圾值。
指定数据类型:
arr1 = np.array([1, 2, 3], dtype=np.float64) print(arr1.dtype)
float64
ndarray的astype方法明确地将一个数组从一个dtype转换成另一个dtype
arr=np.array([2.3,5.6,9.807]) print(arr) print(arr.astype(np.int32))
[2.3 5.6 9.807]
[2 5 9]
NumPy数组的运算
arr = np.array([[1., 2., 3.], [4., 5., 6.]]) print(arr) print(arr-arr) print(arr*arr) print(1/arr) print(arr**2)
[[1. 2. 3.]
[4. 5. 6.]]
[[0. 0. 0.]
[0. 0. 0.]]
[[ 1. 4. 9.]
[16. 25. 36.]]
[[1. 0.5 0.33333333]
[0.25 0.2 0.16666667]]
[[ 1. 4. 9.]
[16. 25. 36.]]
大小相同的数组之间的比较会生成布尔值数组
arr = np.array([[1., 2., 3.], [4., 5., 6.]]) arr2 = np.array([[0., 4., 1.], [7., 2., 12.]]) print(arr>arr2)
[[ True False True]
[False True False]]