NumPy基础--ndarray

来源:互联网 发布:imei校验码算法 编辑:程序博客网 时间:2024/06/05 15:15

      • 创建ndarray
        • 使用array函数
        • 使用数组创建函数
      • ndarray的数据类型
      • 索引和切片
        • 基本的索引和切片
        • 布尔型索引
        • 花式索引
      • 数组转置和轴对换
        • T属性
        • transpose函数
        • swapaxes函数轴对换


创建ndarray

1. 使用array函数

data1 = [[1,2,3,4],[5,6,7,8]]arr1 = np.array(data1)>> print arr1array([[1,2,3,4],          [5,6,7,8]])>> print arr1.ndim2>> print arr1.shape(2,4)>> print arr1.dtypedtype('int64')

2. 使用数组创建函数

函数 说明 array 将输入数据(列表、元组、数组或其他序列类型)转换为ndarray asarray 将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制 arange 类似于内置的range,但返回一个ndarray而不是列表 ones、ones_like 根据指定的形状和dtype创建一个全1数组。ones_like以另一个数组为参数,根据其形状和dtype创建一个全1数组 zeros、zeros_like 同上,产生全0数组 empty、empty_like 创建新数组,只分配内存空间但不填充值 eye、identity 创建一个正方的N * N单位矩阵(对角线为1,其余0)

例如:

np.zeros(5)np.zeros((3, 6))np.empty((2, 3, 2))np.arange(10)

ndarray的数据类型

通过astype方法显示地转换其dtype

arr = np.array([1.2, 3.7, -2.6, 0.5])>> arr.dtypedtype('float64')arr.astype(np.int32)>> arrarray([1, 3, -2, 0], dtype=int32)

也可以直接调用已有的数组dtype

arr1 = np.arange(10)arr2 = np.array([1, 2, 3], dtype=np.float64)arr1.astype(arr2.dtype)

索引和切片

1. 基本的索引和切片

# 一维数组arr = np.arange(10)>> arrarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>> arr[5:8]array([5, 6, 7])arr[5:8] = 12>> arrarray([0, 1, 2, 3, 4, 12, 12, 12, 8, 9])# 数组切片是原始数组的视图,意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上arr_slice = arr[5:8]arr_slice[1] = 123>> arrarray([0, 1, 2, 3, 4, 12, 123, 12, 8, 9])# 如果想得到的是切片的一份副本而非视图,就要显式地进行复制操作arr_slice = arr[5:8].copy()# 多维数组arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])>> arr2[0]array([1, 2, 3])>> arr2[0, 2]3>> arr2[:2]array([1, 2, 3],      [4, 5, 6])>> arr2[:2, 1:]array([2, 3],      [5, 6])

2. 布尔型索引

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])data = randn(7, 4)   #randn生成正态分布的随机数据>> dataarray([[-0.048, 0.5433, -0.2349, 1.2792],       [-0.268, 0.5465, 0.0939, -2.0445],       [-0.047, -2.026, 0.7719, 0.3103],       [2.1452, 0.8799, -0.0523, 0.0672],       [-1.0023, -0.1698, 1.1503, 1.7289],       [0.1913, 0.4544, 0.4519, 0.5535],       [0.5994, 0.8174, -0.9297, -1.2564]])>> names == 'Bob'array([ True, False, False, True, False, False, False], dtype=bool)# 这个布尔型数组可用于数组索引,布尔型数组长度必须和索引的轴长度一致>> data[names == 'Bob']array([[-0.048, 0.5433, -0.2349, 1.2792],       [2.1452, 0.8799, -0.0523, 0.0672]])# 可以使用不等于符号,负号,对条件进行否定data[names != 'Bob']data[-(names == 'Bob')]# 可以将data中所有负值设为0data[data < 0] = 0

3. 花式索引

arr = np.arange(32).reshape((8, 4))>> arrarray([0, 1, 2, 3],      [4, 5, 6, 7],      [8, 9, 10, 11],      [12, 13, 14, 15],      [16, 17, 18, 19],      [20, 21, 22, 23],      [24, 25, 26, 27],      [28, 29, 30, 31])# 选取元素(1,0) (5,3) (7,1) (2,2)>> arr[[1, 5, 7, 2],[0, 3, 1, 2]]array([4, 23, 29 , 10])# 选取矩阵的行列子集>> arr[[1, 5, 7, 2],[ : , 0, 3, 1, 2]]array([[4, 7, 5, 6],       [20, 23, 21, 22],       [28,31, 29, 30],       [8, 11, 9, 10]])# 使用np.ix_函数,它可以将两个一维证书数组转换为一个用于选取方形区域的索引器>> arr[np.ix_([1, 5, 7, 2],[0, 3, 1, 2])]array([[4, 7, 5, 6],       [20, 23, 21, 22],       [28,31, 29, 30],       [8, 11, 9, 10]])

数组转置和轴对换

1. T属性

arr = np.random.randn(6, 3)np.dot(arr.T, arr)  #np.dot计算矩阵内积

2. transpose函数

arr = np.arange(16).reshape((2, 2, 4))>> arrarrary([[[0, 1, 2, 3],         [4, 5, 6, 7]],        [[8, 9, 10, 11],         [12, 13, 14, 15]]])>> arr.transpose((1, 0, 2))arrary([[[0, 1, 2, 3],         [8, 9, 10, 11]],        [[4, 5, 6, 7],         [12, 13, 14, 15]]])

3. swapaxes函数(轴对换)

>> arrarray([[0, 1, 2, 3],       [4, 5, 6, 7]],      [[8, 9, 10, 11],       [12, 13, 14, 15]])# 把轴1,2进行互换, 原本的shape(2,2,4)变为(2,4,2)>> arr.swapaxes(1, 2)array([[[0, 4],        [1, 5],        [2, 6],        [3, 7]],      [[8, 12],        [9, 13],        [10, 14],        [11, 15]]])
原创粉丝点击