一种多维数组对象
一、创建ndarry
#一切序列型对象
import numpy as np
data = [6,7.5,8,0,1]
arry = np.array(data)
arry.dtype
dtype('float64')
#嵌套列表将被转化成为登场等长的多维数组
data1 = [[1,2,3,4],[2,3,4,5]]
arry1 = np.array(data1)
arry1
array([[1, 2, 3, 4],
[2, 3, 4, 5]])
arry1.shape
(2, 4)
arry1.dtype
dtype('int32')
其他创建数组的函数
np.zeros((3,2))#创建全为0的数组
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
np.empty((2,3))#创建一个没有任何数值的数组通常返回未初始化的垃圾值
array([[ 0., 0., 0.],
[ 0., 0., 0.]])
arrange 是range 的数组版本
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
二、narry的数据类型
#dtype是一个特殊的对象,它含有将ndarray将一块内存解释为指定数据类型的全部信息。
arr=np.array([1,2,3,4],dtype=np.float64)
arr1 = np.array([1,2,3,4],dtype=np.int32)
print(arr.dtype)
print(arr1.dtype)
float64
int32
可以通过ndarray的astype方法显示的转换其dtype:
arr1=np.array([1,2,3,4,5,6])
arr1.dtype
dtype('int32')
a = arr1.astype(np.float64)
a.dtype
dtype('float64')
a
array([ 1., 2., 3., 4., 5., 6.])
还可以智能的调用其它数组的dtype
int_arr=np.arange(10)
float_arr = np.array([.2,.13,.356,.123],dtype=np.float64)
int_arr.dtype
dtype('int32')
float_arr.dtype
dtype('float64')
a = int_arr.astype(float_arr.dtype)#astype都会创建出一个新的数组,即使新的astype和老astype相同也是如此
a.dtype
dtype('float64')
三、数组和标量之间的运算
arr = np.array([[1,2,3,4,5],[2,3,4,5,6]])
arr*arr
array([[ 1, 4, 9, 16, 25],
[ 4, 9, 16, 25, 36]])
1/arr
array([[ 1. , 0.5 , 0.33333333, 0.25 , 0.2 ],
[ 0.5 , 0.33333333, 0.25 , 0.2 , 0.16666667]])
四、基本的索引和切片
一维数组类似于列表的切片
arr = np.arange(10)
arr[5]
5
arr[5:8]=12#给切片赋值后会自动传播
arr
array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])
arr_slice = arr[5:8]
arr_slice[1] = 12345
arr
array([ 0, 1, 2, 3, 4, 12, 12345, 12, 8, 9])
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2d[2]
array([7, 8, 9])
#选取单个元素
arr2d[0,2]
3
#如果省去逗号后面的索引则返回对象是一个维度低一点的数组
arr2d[0]
array([1, 2, 3])
arr3d=np.array([[[1,2,