You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从复杂CSV文件构建ID关联的3x3应力张量矩阵及numpy旋转方法

应力张量矩阵生成与旋转实现方案

一、批量生成绑定ID的3x3应力张量矩阵

假设你导入的CSV对应的Pandas DataFrame变量名为df,待处理的目标ID列表变量名为target_ids,表头命名规则为应力分量_ID(如x_1001、xy_1001对应ID为1001的分量),实现代码如下:

import pandas as pd
import numpy as np

# 初始化存储字典:key为目标ID,value为形状(时间点数量, 3, 3)的张量数组
stress_tensor_dict = {}
# 提取有效时间点数据:你的文件共502行,前2行若为表头/注释行则过滤,保留500行时间点数据
time_series_df = df.iloc[2:].reset_index(drop=True)
n_time = len(time_series_df)

for id in target_ids:
    # 匹配当前ID对应的6个应力分量列,若表头后缀格式不是`_ID`可修改此处拼接规则
    comp_cols = [
        f'x_{id}',
        f'y_{id}',
        f'z_{id}',
        f'xy_{id}',
        f'yz_{id}',
        f'zx_{id}'
    ]
    # 提取分量时间序列,形状为(n_time, 6)
    comp_arr = time_series_df[comp_cols].values
    # 批量生成3x3对称应力张量
    tensor_arr = np.zeros((n_time, 3, 3))
    # 赋值对称矩阵元素
    tensor_arr[:, 0, 0] = comp_arr[:, 0]
    tensor_arr[:, 0, 1] = tensor_arr[:, 1, 0] = comp_arr[:, 3]
    tensor_arr[:, 0, 2] = tensor_arr[:, 2, 0] = comp_arr[:, 5]
    tensor_arr[:, 1, 1] = comp_arr[:, 1]
    tensor_arr[:, 1, 2] = tensor_arr[:, 2, 1] = comp_arr[:, 4]
    tensor_arr[:, 2, 2] = comp_arr[:, 2]
    # 绑定ID存入字典
    stress_tensor_dict[id] = tensor_arr

生成后可直接通过stress_tensor_dict[目标ID][时间点索引]获取对应3x3张量,方便后续调用。

二、基于Numpy的3x3应力张量旋转实现

应力张量的旋转遵循公式:σ' = R · σ · R^T,其中R为3x3正交旋转矩阵,R^T为旋转矩阵的转置,实现代码支持单个张量和批量时间点张量两种输入格式:

def rotate_stress_tensor(stress_tensor, rot_matrix):
    """
    旋转对称应力张量
    参数:
        stress_tensor:输入应力张量,支持两种格式
            1. 单个3x3张量:形状(3, 3)
            2. 批量时间点张量:形状(n_time, 3, 3),与上文生成的张量数组格式匹配
        rot_matrix:3x3正交旋转矩阵
    返回:
        旋转后的应力张量,形状与输入一致
    """
    if stress_tensor.ndim == 3:
        # 广播机制实现批量矩阵运算,无需循环遍历时间点
        return rot_matrix @ stress_tensor @ rot_matrix.T
    return rot_matrix @ stress_tensor @ rot_matrix.T

使用示例

对ID为1001的所有时间点张量,执行绕X轴旋转30度的操作:

# 生成绕X轴旋转30度的正交旋转矩阵
theta = np.deg2rad(30)
rot_x = np.array([
    [1, 0, 0],
    [0, np.cos(theta), -np.sin(theta)],
    [0, np.sin(theta), np.cos(theta)]
])
# 旋转张量
rotated_tensor = rotate_stress_tensor(stress_tensor_dict[1001], rot_x)

内容的提问来源于stack exchange,提问作者Asbjoern Lund

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:48:05