常用第三方模块——Numpy模块

NumPy模块

1. NumPy多维数组

1.1 创建数组对象

(1)使用array函数创建数组对象
  • 格式

    np.array(obj, #接收array,表示想要创建的数组
             dtype, # 接收data-type,表示数组所需要的数组类型,未给定则选择保存对象所需的最小类型
             ndmin) # 接收int,指定生成数组应该具有的最小维数
    
  • 创建ndarray数组

    import numpy as np
    data = [1,3,5,7] # 可以是列表,元组,多维数组
    w = np.array(data) # 输出 [1 3 5 7]
    
  • 指定dtype

    w = np.array([1,2,3,4],dtype = 'float64') 
    print(w.dtype) # 输出float
    
(2)专门创建数组的函数
  • arange函数

    主要用来创建数组
    
  • linspace函数

    通过指定起始值,终值和元素个数创建一维数组(等差)
    
    print(np.linspace(0,1,5)) # 输出[0. 0.25 0.5 0.75 1.]
    
  • logspace函数

    创建等比数列
    

    ⚠️起始位和终值位代表的是10的幂,第三个参数表示元素的个数

  • zeros函数

    构建全0矩阵
    
  • ones函数

    构建全1矩阵
    
  • diag函数

    构建对角矩阵,即对角线元素为0或指定值,其他元素均为0
    
  • eye函数

    构建对角矩阵,对角线位置为1,其他位置全为0
    

1.2 ndarray对象属性和数据转换

属性说明
ndim数据轴的个数
shape数组的维度
size数组元素个数
dtype数据类型
itemsize数组中每个元素的字节大小
对于已经创建好的数组,可以通过astype方法进行数据类型的转换

1.3 生成随机数

  • 常用随机数生成函数
函数说明
seed使每次生成的随机数都是一样的
permutation返回一个序列的随机排列或返回一个随机排列的范围
shuffle对一个序列进行随机排序
binomial产生二项分布的随机数
normal产生正态分布的随机数
beta产生beta分布的随机数
chisquare产生卡方分布的随机数
gamma产生gamma分布的随机数
uniform产生[0, 1)中均匀分布的随机数

1.4 数组变换

(1)数组重塑
reshape
  • 通过reshape方法改变数组维度
  • reshape中的一个参数可以设置为-1,表示数组维度可以根据本身来推断
ravel/flatten
数据散开或数据扁平化(使数据降维)
(2)数组合并
  • 横向合并:hstack函数
将ndarray对象构成的元组作为参数
  • 纵向合并:vstack函数
  • concatenate函数
    • axis = 1 横向合并
    • axis = 0 纵向合并
(3)数组分割
  • hsplit:横向分割

  • vsplit:纵向分隔

  • split

    axis = 1 横向分割

    axis = 0 纵向分割

(4)数组转置和轴对换
  • 数组使用transpose转置
  • T属性转置
  • swapaxes实现轴对换

1.5 数组与标量之间的运算

"""数组元素的追加"""
a = [1, 2, 3]
b = []
for i in a:
    b.append(i*i)
print('b数组:',b) # b数组:[1, 4, 9]
wy = np.array([1,2,3])
c = wy * 2
print('c数组:',c) # c数组:[2 4 6]

1.6 ufunc函数

ufunc函数全称为通用函数,是一种能够对数组中的所有元素进行操作的函数
(1)常用的ufunc函数运算
  • 四则运算

  • 比较运算

    最终返回布尔值
    
  • 逻辑运算

    np.any函数表示逻辑“or”;np.all函数表示逻辑"and",运算结果返回布尔值
    
(2)ufunc函数的广播机制

广播是指不同形状的数组之间执行算数运算的方式。广播机制需要遵循4个原则:

(1)让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐

数组 C:形状是 (2, 3)
数组 D:形状是 (5, 3, 4)

# 补齐之后
数组 C 的形状是 (1, 2, 3)
数组 D 的形状是 (5, 3, 4)

(2)输出数组的shape是输入数组shape的各个轴上的最大值

数组 A,形状是 (3, 4)
数组 B,形状是 (2, 5)

输出数组的形状是 (3, 5)

(3)如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错

"""长度为1"""
import numpy as np
A = np.zeros((1, 3, 4))
B = np.ones((2, 3, 4))
# 可以进行操作
C = A + B
print(C.shape)  # 输出: (2, 3, 4)
形状为(234)
B = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
              [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]])

(4)当输入数组的某个轴长度为1时,沿着此轴运算时都用此轴上的第一组值

import numpy as np
A = np.array([[1, 2, 3]])  # 形状 (1, 3) 使用A[0]
B = np.array([4, 5, 6])  # 形状 (3,) 
C = A + B  # 广播并进行加法运算

print("C = ", C) # 输出 C =  [[5 7 9]]

1.7 条件逻辑运算

(1)基础

arr1 = np.array([1,3,5,7])
arr2 = np.array([2,4,6,8])
cond = np.array([True,False,True,False])
result = [(x if c else y)for x,y,c in zip(arr1,arr2,cond)]
print(result) # 输出[1, 4, 5, 8]

(2)where方法

np.where(condition, x, y)
# 如果满足条件输出x,不满足条件输出y
np.where([[True,False],[True,True]],[[1,2],[3,4],[9,8],[7,6]])
# 输出array([[1,8],[3,4]])
  • where中仅有condition参数时,则输出满足条件元素的坐标,坐标通常以tuple类型给出
w = np.array([2,5,6,3,10])
np.where(w > 4)
# 输出 (array([1, 2, 4],dtype = int64),)

2. 数组读写

  • ny.load("文件名.npy"):从二进制文件中读取数据
  • ny.save("文件名[.npy]",arr):以二进制的格式保存数据
  • np.savez("文件名[.npy]",arr1,arr2,arr3):多个数组保存
  • np.loadtxt("文件名",delimiter=","):把文件加载到一个二维数组中
  • np.savetxt("文件名",arr,fmt = "%d",delimiter=","):将数组写到某种分隔符隔开的文本文件中
  • np.genfromtxt("文件名",delimiter=","):结构化数字和缺失数据
import numpy as np

# 1. np.save 以二进制的格式保存数据
# 创建一个示例数组
arr = np.array([1, 2, 3, 4, 5])
# 保存数组到二进制文件
np.save('single_array.npy', arr)
print("数组已保存到 single_array.npy")

# 2. np.load 从二进制文件中读取数据
# 从二进制文件中加载数组
loaded_arr = np.load('single_array.npy')
print("从 single_array.npy 加载的数组:", loaded_arr)

# 3. np.savez 多个数组保存
# 创建多个示例数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.array([7, 8, 9])
# 保存多个数组到一个二进制文件
np.savez('multiple_arrays.npz', arr1=arr1, arr2=arr2, arr3=arr3)
print("多个数组已保存到 multiple_arrays.npz")

# 加载多个数组
loaded_data = np.load('multiple_arrays.npz')
print("从 multiple_arrays.npz 加载的数组1:", loaded_data['arr1'])
print("从 multiple_arrays.npz 加载的数组2:", loaded_data['arr2'])
print("从 multiple_arrays.npz 加载的数组3:", loaded_data['arr3'])

# 4. np.savetxt 将数组写到某种分隔符隔开的文本文件中
# 创建一个二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 将数组保存为以逗号分隔的文本文件
np.savetxt('array_text.txt', arr_2d, fmt='%d', delimiter=',')
print("二维数组已保存到 array_text.txt")

# 5. np.loadtxt 把文件加载到一个二维数组中
# 从文本文件中加载数组
loaded_2d_arr = np.loadtxt('array_text.txt', delimiter=',')
print("从 array_text.txt 加载的二维数组:")
print(loaded_2d_arr)

# 6. np.genfromtxt 结构化数字和缺失数据
# 创建包含缺失值的示例数据
data = """1,2,3
4,,6
7,8,9"""
with open('data_with_missing.txt', 'w') as f:
    f.write(data)

# 从包含缺失值的文本文件中加载数据
loaded_missing_data = np.genfromtxt('data_with_missing.txt', delimiter=',')
print("从 data_with_missing.txt 加载的包含缺失值的数据:")
print(loaded_missing_data)

3. 统计分析

(1)排序

  • 使用sort函数进行排序

    • axis = 1 横向排序
    • axis = 0 纵向排序
  • 在给定一个或多个键时,得到一个由整数构成的索引数组,使用argsortlexsort函数

    • argsort:返回值为数组排序后的下标排列
    arr = np.array([7,9,5,2,9,4,3,1,4,3])
    print('原数组:',arr) # [7,9,5,2,9,4,3,1,4,3]
    print('排序后:',arr.argsort()) # [7,3,6,9,5,8,2,0,1,4]
    
    • lexsort:是从最后一个关键字排序(元组形式),最终得到的是索引
    import numpy as np
    
    names = np.array(['Tom', 'Jerry', 'Bob', 'Tom'])
    scores = np.array([88, 92, 75, 85])
    
    # 先按名字升序,再按成绩升序
    indices = np.lexsort((scores, names))
    
    print(indices)            # 输出排序后索引 [2 1 3 0]
    print(names[indices])     # 排序后的名字 ['Bob' 'Jerry' 'Tom' 'Tom']
    print(scores[indices])    # 对应的成绩 [75   92    85   88]
    
    

(2)重复数据与去重

去重

unique

import numpy as np
my_array = np.array([1, 2, 3, 2, 4, 1, 5])
# 去重
unique_array = np.unique(my_array)
print(unique_array) # [1 2 3 4 5]
重复
  • tile
基本格式:numpy.tile(A, reps) # reps 重复的次数
import numpy as np

A = np.array([1, 2, 3])
# 沿一维方向重复 3 次
result = np.tile(A, 3)
print(result) # [1 2 3 1 2 3 1 2 3]
  • repeat
基本格式:numpy.repeat(a,reps,axis = None)
axis = 0 按行进行元素重复
axis = 1 按列进行元素重复
"""按行重复"""
import numpy as np

# 原始数组
a = np.array([[1, 2], [3, 4]])

# 沿第一个维度(行)重复 2 次
result = np.repeat(a, 2, axis=0)

print(result) # [[1 2]
              #  [1 2]
              #  [3 4]
              #  [3 4]]
   
"""按列重复"""
import numpy as np

# 原始数组
a = np.array([[1, 2], [3, 4]])

# 沿第二个维度(列)重复 2 次
result = np.repeat(a, 2, axis=1)

print(result) # [[1 1 2 2]
              #  [3 3 4 4]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值