微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

反映 4d 对称数据

如何解决反映 4d 对称数据

我发现没有关于如何反映对称 4d 数据的示例,当想要使用对称平面进行 3d 模拟时非常有用以减少计算(例如 ANSYS 、COMSOL 等)。此示例显示了与 COMSOL 仿真对应的数据文件结构,其结构为:X,Y,Z,Amplitude

模型沿 Y 平面对称,并在该平面上切片,因此必须计算的网格元素较少。为了获得完整的 Y 平面视图(即 Y 从 -0.5 到 0.5),必须沿 Y 平面反射数据。

此类问题的示例代码如下所示:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

### generate a SIMULATION type-file###
X = np.linspace(-0.5,0.5,50)
Y = np.linspace(-0.5,50)    #to be reflected/extended to 0.5
Z = np.linspace(-0.5,50)
Xq,Yq,Zq = np.meshgrid(X,Z)
Amp = 1* np.exp(-((Xq - 0) ** 2 / (0.03) + ( Yq - 0) ** 2 / (0.03) + ( Zq - 0) ** 2 / (0.03)))

datafile = np.vstack([Xq.ravel(),Yq.ravel(),Zq.ravel(),Amp.ravel()]).T   #resemble the simulation data structur,in this case X,Amp

### PYTHON POST-PROCESSING ###
X = datafile[:,0]
Y = datafile[:,1]
Z = datafile[:,2]
Amp = datafile[:,3]    #Amplitude Could be a Pressure,Force,Magnetic field,etc

xq = 0.0    #choose an arbitrary plane to show amplitude distribution over this plane
yq = np.linspace(min(Y),max(Y),50)  
zq = np.linspace(min(Z),max(Z),Zq = np.meshgrid(xq,yq,zq)
int_plane = griddata((X,Z),Amp,(Xq,Zq),method='linear')
int_plane = np.squeeze(int_plane)

fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
ax.scatter(Zq,zs=int_plane)
ax.set_title('3D view');
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()

enter image description here

需要考虑的一个重要细节是平面 Y=0 不能重复。

这里的目的是重建数据集的另一半(即整个另一个 3D 半空间 + 相应的幅度)。 3D 空间的正确反射将输出完整的 3D 高斯。如何有效地完成这项工作?

解决方法

您沿 y 轴反射,省略最后一个元素,并将反射数据附加到数据本身

amp = np.vstack((amp,amp[-2::-1]))

示例:

In [37]: x,y,z = (-1,1),(-50,0),(-5,5)
    ...: X,Y,X = np.meshgrid(x,z)
    ...: data = X+Y+Z
    ...: print("----------------",data,sep='\n')
    ...: data = np.vstack((data,data[-2::-1]))
    ...: print("----------------",sep='\n')
----------------
[[[-56 -50 -44]
  [-56 -50 -44]
  [-56 -50 -44]]

 [[ -6   0   6]
  [ -6   0   6]
  [ -6   0   6]]]
----------------
[[[-56 -50 -44]
  [-56 -50 -44]
  [-56 -50 -44]]

 [[ -6   0   6]
  [ -6   0   6]
  [ -6   0   6]]

 [[-56 -50 -44]
  [-56 -50 -44]
  [-56 -50 -44]]]

In [38]: 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。