numpy学习

1-数组拼接

np.concatenate (concatenate意思是连接,连接的)是 NumPy 提供的用于连接两个或多个数组的函数。

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = np.concatenate((a, b))
print(result)  # 输出: [1 2 3 4 5 6]
 

如果 a 和 b 是二维数组,要沿行方向(axis=0)拼接:

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
result = np.concatenate((a, b), axis=0)
print(result)
# 输出:
# [[1 2]
#  [3 4]
#  [5 6]
#  [7 8]]
 

如果需要沿不同轴拼接:

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
result = np.concatenate((a, b), axis=1)
print(result)
# 输出:
# [[1 2 5 6]
#  [3 4 7 8]]
 

np.vstack(vertical stack)和np.hstack(horizontal stack)是 np.concatenate 的特殊情况

# 垂直拼接(沿行方向,相当于 axis=0)
result = np.vstack((a, b))

# 水平拼接(沿列方向,相当于 axis=1)
result = np.hstack((a, b))
 

2-理解 a[:, newaxis] 的作用

a[:, newaxis] 是 NumPy 中用于增加数组维度的一种操作。它通过插入一个长度为 1 的新轴(维度)来改变数组的形状

具体功能

假设 a 是一个一维数组,其形状为 (n,)。执行 a[:, newaxis] 后,数组的形状变为 (n, 1)
如果是二维数组 a 的形状为 (m, n),则 a[:, newaxis] 会将其扩展为 (m, 1, n)

import numpy as np

# 一维数组示例
a = np.array([1, 2, 3])
print("原始形状:", a.shape)  # 输出 (3,)

a_expanded = a[:, np.newaxis]
print("扩展后形状:", a_expanded.shape)  # 输出 (3, 1)
print("扩展后数组:\n", a_expanded)

# 二维数组示例
b = np.array([[1, 2], [3, 4]])
print("原始形状:", b.shape)  # 输出 (2, 2)

b_expanded = b[:, np.newaxis]
print("扩展后形状:", b_expanded.shape)  # 输出 (2, 1, 2)
print("扩展后数组:\n", b_expanded)
 

则输出

原始形状: (3,)
扩展后形状: (3, 1)
扩展后数组:
 [[1]
 [2]
 [3]]
原始形状: (2, 2)
扩展后形状: (2, 1, 2)
扩展后数组:
 [[[1 2]]

 [[3 4]]]

3-数组排序

arr = np.array([2, 1, 5, 3, 7, 4, 6, 8])
arr = np.sort(arr)

4-输入输出I/O

使用np.save()将数组保存为.npy文件:

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
np.save('filename', a)  # 保存为'filename.npy'
 

加载并翻转数组,使用np.load()读取文件,并用np.flip()反转数组顺序:

b = np.flip(np.load('filename.npy'))  # 加载后翻转
print(b)  # 输出:[6 5 4 3 2 1]
 

    npy是NumPy默认的二进制文件格式,保存时若不指定后缀会自动添加。

    np.flip()沿默认轴(一维数组的唯一轴)反转元素顺序。

    完整示例

    import numpy as np
    
    # 创建并保存数组
    a = np.array([1, 2, 3, 4, 5, 6])
    np.save('filename', a)
    
    # 加载并翻转
    b = np.flip(np.load('filename.npy'))
    print("Original:", a)  # [1 2 3 4 5 6]
    print("Flipped:", b)   # [6 5 4 3 2 1]
     
    

    使用 np.savetxt 将 NumPy 数组保存为 CSV 文件时,可以通过调整参数来控制输出格式。

    import numpy as np
    
    # 示例数据
    b = np.array([[1, 2, 3], [4, 5, 6]])
    
    # 保存为CSV,默认以科学计数法格式保存
    np.savetxt('new_file.csv', b, delimiter=',', fmt='%f')
     
    

    delimiter即分隔符的意思。

    为 CSV 文件添加表头,可以结合 header 参数:

    header = 'col1,col2,col3'
    np.savetxt('new_file.csv', b, delimiter=',', fmt='%d', header=header, comments='')
     
    

    5-np.genfromtxt

    文件包含非数值列,用 np.genfromtxt

    data = np.genfromtxt('new_file.csv', delimiter=',', names=True, dtype=None)
     
    

    names=True 自动读取首行作为列名,dtype=None 自动推断数据类型。

    缺失值处理

    指定缺失值占位符:

    data = np.genfromtxt('new_file.csv', delimiter=',', missing_values='NA', filling_values=np.nan)
     
    

    6-掩码数组masked

    os.path.join

    os.path.join是 Python 标准库 os.path 模块中的一个方法,用于将多个路径组件拼接成一个完整的路径。该方法能够自动处理不同操作系统的路径分隔符(如 \ 在 Windows,/ Linux/macOS),确保生成的路径格式正确。

    import os
    
    # 拼接路径
    path = os.path.join("folder", "subfolder", "file.txt")
    print(path)  # 输出: "folder/subfolder/file.txt"(Linux/macOS)或 "folder\subfolder\file.txt"(Windows)
    
    # 处理绝对路径
    abs_path = os.path.join("/home/user", "documents", "report.pdf")
    print(abs_path)  # 输出: "/home/user/documents/report.pdf"
    
    # 混合拼接
    mixed_path = os.path.join("C:\\Users", "admin", "data.json")
    print(mixed_path)  # 输出: "C:\Users\admin\data.json"(Windows)
     
    

    特点

    1. 自动处理分隔符
      无需手动添加 / 或 \os.path.join 会根据当前操作系统选择正确的分隔符。

    2. 忽略多余分隔符
      如果某个组件已包含分隔符(如 folder/),方法会智能处理,避免重复拼接。

    3. 绝对路径处理
      如果某个组件是绝对路径(如 /home 或 C:\),则之前的所有组件会被忽略,直接从该组件开始拼接。

    4. 空字符串忽略
      空字符串组件会被自动忽略,不会影响路径拼接。

    np.genfromtxt 

    np.genfromtxt 是 NumPy 中用于从文本文件加载数据的函数,支持处理缺失值、多种数据类型等复杂场景。以下是其主要参数及说明:

    fname
    指定输入文件路径或文件对象。可以是字符串(文件名)、文件句柄或生成器。

    data = np.genfromtxt('data.txt')
     
    

    dtype
    指定输出数组的数据类型。默认为 float,可设置为 intstr 等或自定义类型。

    data = np.genfromtxt('data.txt', dtype=int)
     
    

    delimiter
    定义分隔符。默认为 None(自动检测),可指定为逗号 ,、空格 等。

    data = np.genfromtxt('data.csv', delimiter=',')
     
    

    skip_header
    跳过文件开头的行数。适用于忽略标题行。

    data = np.genfromtxt('data.txt', skip_header=1)
     
    

    skip_footer
    跳过文件末尾的行数。适用于忽略注释行。

    data = np.genfromtxt('data.txt', skip_footer=2)
     
    

    usecols
    选择读取的列索引或切片。可以是整数列表或元组。

    data = np.genfromtxt('data.txt', usecols=(0, 2))
     
    

    filling_values
    指定缺失值的填充值。默认将缺失值替换为 np.nan

    data = np.genfromtxt('data.txt', filling_values=0)
     
    

    names
    为列命名,生成结构化数组。可传入字符串列表或 True(自动从首行读取)。

    data = np.genfromtxt('data.txt', names=['a', 'b', 'c'])
     
    

    autostrip
    自动去除字符串数据的前后空格。默认为 False

    data = np.genfromtxt('data.txt', dtype=str, autostrip=True)
     
    

    encoding
    指定文件编码(如 'utf-8')。处理非 ASCII 文件时可能需要。

    data = np.genfromtxt('data.txt', encoding='utf-8')
     
    

    掩码数组用法

    import numpy as np

    # 创建掩码数组
    data = np.array([1, 2, -999, 4, -999])  # 用-999表示缺失值
    masked_data = np.ma.masked_where(data == -999, data)

    print("原始数据:", data)
    print("掩码数组:", masked_data)          # 输出: [1 2 -- 4 --]
    print("有效数据:", masked_data.compressed())  # 输出: [1 2 4]

    使用 np.ma.masked_where 进行数组掩码

    np.ma.masked_where 是 NumPy 的掩码数组模块中的一个函数,用于根据条件掩码数组中的元素。掩码后的元素在计算中会被忽略。

    numpy.ma.masked_where(condition, arr, copy=True)
     
    
    • condition:布尔条件,满足条件的元素会被掩码。
    • arr:输入数组。
    • copy:是否返回掩码数组的副本(默认为 True)。
    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    masked_arr = np.ma.masked_where(arr > 3, arr)
    print(masked_arr)
     
    

    输出:

    [1 2 3 -- --]
     
    

    满足 arr > 3 的元素被掩码(显示为 --)。

     

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值