python_numpy

python numpy 学习

  • 1 numpy 概述

    • NumPy 是用于处理数组的 python 库。
    • NumPy 旨在提供一个比传统 Python 列表快 50 倍的数组对象。
    • NumPy 数组存储在内存中的一个连续位置,因此进程可以非常有效地访问和操纵它们.
    • NumPy 是一个 Python 库,部分用 Python 编写,但是大多数需要快速计算的部分都是用 C 或 C ++ 编写的。
  • 2 查看numpy的版本

import numpy as np
print(np.__version__)
  • 3 ndarray.array().ndim 维度属性
import numpy as np
arr = np.array([1, 2, 3, 4], ndmin=5)
print(arr)
print('number of dimensions :', arr.ndim)
  • 4 访问ndarray中的值
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr[0, 1, 2])
  • 5 裁切 arr[1:5:2] // [start_index,end_index,step]
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[::2])
  • 6 numpy数据类型
i - 整数
b - 布尔
u - 无符号整数
f - 浮点
c - 复合浮点数
m - timedelta
M - datetime
O - 对象
S - 字符串
U - unicode 字符串
V - 固定的其他类型的内存块 ( void )
- (1) 创建ndarray时指定值的类型
    - arr = np.array([1, 2, 3, 4], dtype='S')
    - arr = np.array([1, 2, 3, 4], dtype='i3') // int24
    - arr = np.array(['1', '2', '3'], dtype='i2') //a rray([1, 2, 3], dtype=int16)
- (2) 转换已有的数据类型
    - newarr = arr.astype('i2')
    - newarr = arr.astype(int)
    - - arr = np.array([1, 0, 3]) newarr = arr.astype(bool) // [ True False  True]
  • 7 ndarray的副本和视图

    • (1) 副本拥有数据,对副本所做的任何更改都不会影响原始数组,对原始数组所做的任何更改也不会影响副本。
      • x = arr.copy()
    • (2) 视图不拥有数据,对视图所做的任何更改都会影响原始数组,而对原始数组所做的任何更改都会影响视图。

  • 8 array的base属性:每个 NumPy 数组都有一个属性 base,如果该数组拥有数据,则这个 base 属性返回 None。
    否则,base 属性将引用原始对象。

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
y = arr.view()
print(x.base)
print(y.base)
# None
# [1 2 3 4 5]
  • 9 ndarray的shape属性
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr.shape
# (2, 2, 3)
  • 10 ndarray的reshape

    • (1) arr.reshape()返回的是arr的视图
    import numpy as np
    arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
    newarr = arr.reshape(4, 3)
    print(newarr)
    print(arr)
    
    • (2) 未知维度
      • 1 newarr = arr.reshape(2, 2, -1) // 最后一个-1表示,numpy自动计算该维度
      • 2 newarr = arr.reshape(-1) //该-1表示将多维数组自动变成一维
    • (3) 有很多功能可以更改 numpy flatten、ravel 中数组形状,还可以重新排列元素 rot90、flip、fliplr、flipud 等。
      • newarr = np.rot90(arr) // 逆时针旋转90°
      • newarr = np.flip(arr) // 上下翻转,同flipud
      • newarr = np.fliplr(arr) // 左右翻转
      • newarr = arr.flatten() // 变成一维
      • newarr = arr.ravel() // 变成一维
  • 11 使用 nditer() 迭代数组

    • (1) 迭代每个标量元素
      • 在基本的 for 循环中,迭代遍历数组的每个标量,我们需要使用 n 个 for 循环,对于具有高维数的数组可能很难编写。
      • 代码
      import numpy as np
      arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
      for x in np.nditer(arr):
          print(x)
      # 1 2 3 4 5 6
      
    • (2) 迭代不同数据类型的数组
      • for x in np.nditer(arr, flags=[‘buffered’], op_dtypes=[‘S’]): // 其中,flags是额外申请空间进行类型转换,op_dtypes是将会转化成的类型
    • (3) 以不同的步长迭代
      • np.nditer(arr[:, ::2]) // 行正常迭代,列迭代的步长是2
    • (4) 使用ndenumerate()迭代
    import numpy as np
    arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    for idx, x in np.ndenumerate(arr):
          print(idx, x) // idx是x在arr中的位置例如(1, 2) 7
    
  • 12 numpy数组连接(1:行方向连接,0:列方向连接)

    • (1) concatenate()
    import numpy as np
    arr1 = np.array([[1, 2], [3, 4]])
    arr2 = np.array([[5, 6], [7, 8]])
    arr = np.concatenate((arr1, arr2), axis=1)
    print(arr)
    
    • (2) stack() 堆叠:提高一个维度
    import numpy as np
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([4, 5, 6])
    arr = np.stack((arr1, arr2))
    print(arr)
    
    • (3) hstack() // 按行堆叠
    • (4) vstack() // 按列堆叠
    • (5) dstack() // 按高度堆叠,高度与深度相同
  • 13 数组的分割

    • (1) newarr = np.array_split(arr, 3) //如果数组中的元素少于要求的数量,它将从末尾进行相应调整。
    • (2) split() 方法也可用,但是当源数组中的元素较少,但却用于拆分时,它将不会调整元素,array_split() 正常工作,但 split() 会失败。
    • (3) newarr = np.array_split(arr, 3,axis=1) // axis拆分的维度
    • (4) 与h/s/d stack() 方法相反的 np.(h/v/d)split() 拆分方法。
  • 14 numpy 数组搜索

    • (1) np.where()
      • np.where(arr==array某个元素)
      • np.where(arr%2 == 1)
    • (2) np.searchsorted(np.anarray,int,side=‘right’ or ‘left’)
      • x = np.searchsorted(arr, 7)
      import numpy as np
      arr = np.array([1, 3, 5, 7])
      x = np.searchsorted(arr, [2, 4, 6])
      print(x) # 返回值是一个数组:[1 2 3] 包含三个索引,其中将在原始数组中插入 2、4、6 以维持顺序。
      
  • 15 数组排序 np.sort()

    • np.sort() # 返回的是数组的副本
import numpy as np
arr = np.array([[3, 2, 4], [5, 0, 1]])
print(np.sort(arr))
  • 16 数组过滤器(挑选出符合条件的values)

    • (1) 过滤器
    import numpy as np
    arr = np.array([61, 62, 63, 64, 65])
    x = [True, False, True, False, True] // 这个x就是过滤器,true位置上的所有元素将组成一个新的数组
    newarr = arr[x]
    print(newarr)
    
    • (2) for 循环可以手动创建过滤器
    • (3) numpy提供的方法提供的过滤器
    import numpy as np
    arr = np.array([61, 62, 63, 64, 65])
    filter_arr = arr > 62 // 这里就创建了一个过滤器 [False False  True  True  True]
    newarr = arr[filter_arr]
    print(filter_arr)
    print(newarr)
    
  • 17 numpy 随机数

    • np.randint(100,size=(3,5)) //生成一个0-100 之间的3行5列的矩阵
    • x = random.rand(3, 5) // 生成有 3 行的 2-D 数组,每行包含 5 个随机数
    • 从数组生成随机数 np.choice([1,2,3,5,6],size=(3,4))
  • 18 ufuncs——通用函数

    • 例如:对两个列表的元素进行相加
      • (1) for循环实现
      x = [1, 2, 3, 4]
      y = [4, 5, 6, 7]
      z = []
      for i, j in zip(x, y):
          z.append(i + j)
      print(z)
      
      • (2) unfuncs —— np.add() 函数实现
      import numpy as np
      x = [1, 2, 3, 4]
      y = [4, 5, 6, 7]
      z = np.add(x, y)
      print(z)
      

Supongo que te gusta

Origin blog.csdn.net/ahao6666666/article/details/113408746
Recomendado
Clasificación