我有三个对应于xyz坐标空间的3D网格矩阵(X,Y,Z).

我还有一个3D Numpy矩阵A,其中A [i,j,k]包含一个与点(x,y,z)相关联的浮点数,其中x = X [i,j,k],y = Y [i ,j,k]和z = Z [i,j,k].浮点值在A内是连续的(即A的相邻元素之间的值的变化通常很小).

有没有办法使用Matplotlib或任何其他基于Python的图形包绘制对应于A中给定浮点值的曲面?例如,如果给定值2.34,我有兴趣获得矩阵A的绘制轮廓曲面,只要2.34(加或减一些公差)出现?

到目前为止,我已经能够恢复A中所有值的xyz坐标,这些坐标在目标值的某个容差范围内,然后使用this(下面的代码)制作3D散点图.也许还有一种方法可以从这些点绘制表面?

def clean (A, t, dt):

# function for making A binary for t+-dt

# t is the target value I want in the matrix A with tolerance dt

new_A = np.copy(A)

new_A[np.logical_and(new_A > t-dt, new_A < t+dt)] = -1

new_A[new_A != -1] = 0

new_A[new_A == -1] = 1

return (new_A)

def get_surface (X, Y, Z, new_A):

x_vals = []

y_vals = []

z_vals = []

# Retrieve (x,y,z) coordinates of surface

for i in range(new_A.shape[0]):

for j in range(new_A.shape[1]):

for k in range(new_A.shape[2]):

if new_A[i,j,k] == 1.0:

x_vals.append(X[i,j,k])

y_vals.append(Y[i,j,k])

z_vals.append(Z[i,j,k])

return (np.array(x_vals), np.array(y_vals), np.array(z_vals))

cleaned_A = clean (A, t=2.5, dt=0.001)

x_f, y_f, z_f = get_surface (X, Y, Z, cleaned_A )

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d', aspect='equal')

ax.scatter(x_f, y_f, z_f, color='g', s=1)

我也尝试过ax.plot_trisurf(x_f,y_f,z_f),但这给了我一个连接不佳的情节.我猜测我的数组中的值的排序可能会影响这个,在这种情况下,有一个包可以做点某些3D插值表面绘图与点的随机排序(例如通过最小化表面积或类似的东西?)

我感兴趣的对象是大致球形(即每个(x,y)两个z).我似乎无法找到有人在一个封闭的3D表面上进行三角测量的任何工作示例,但也许我没有找到正确的位置.

最佳答案 经过大量的挖掘,我认为我已经找到了一个有效的解决方案(至少在一个领域 – 当我尝试球体的变形时会更新我的答案).非常感谢有助于我思考正确道路的评论.我基本上使用ConvexHull从scipy.spatial进行三角测量:

from matplotlib.tri import Triangulation

from scipy.spatial import ConvexHull

def clean (A, t, dt):

# function for making A binary for t+-dt

# t is the target value I want in the matrix A with tolerance dt

new_A = np.copy(A)

new_A[np.logical_and(new_A > t-dt, new_A < t+dt)] = -1

new_A[new_A != -1] = 0

new_A[new_A == -1] = 1

return (new_A)

def get_surface (X, Y, Z, new_A):

x_vals = []

y_vals = []

z_vals = []

# Retrieve (x,y,z) coordinates of surface

for i in range(new_A.shape[0]):

for j in range(new_A.shape[1]):

for k in range(new_A.shape[2]):

if new_A[i,j,k] == 1.0:

x_vals.append(X[i,j,k])

y_vals.append(Y[i,j,k])

z_vals.append(Z[i,j,k])

return (np.array(x_vals), np.array(y_vals), np.array(z_vals))

cleaned_A = clean (A, t=2.5, dt=0.001)

x_f, y_f, z_f = get_surface (X, Y, Z, cleaned_A )

Xs = np.vstack((x_f, y_f, z_f)).T

hull = ConvexHull(Xs)

x, y, z = Xs.T

tri = Triangulation(x, y, triangles=hull.simplices)

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d', aspect='equal')

ax.plot_trisurf(tri, z, color='g', alpha=0.1)

python 轮廓矩阵_python – 在3D numpy矩阵中绘制给定值的曲面轮廓相关推荐

  1. Python学习笔记第四十八天(NumPy 矩阵库(Matrix))

    Python学习笔记第四十八天 NumPy 矩阵库(Matrix) 转置矩阵 matlib.empty() numpy.matlib.ones() numpy.matlib.eye() numpy.m ...

  2. python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)

    python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value) 目 ...

  3. python增加一列数据_Python编程给numpy矩阵添加一列方法示例

    首先我们有一个数据是一个mn的numpy矩阵现在我们希望能够进行给他加上一列变成一个m(n+1)的矩阵 import numpy as np a = np.array([[1,2,3],[4,5,6] ...

  4. python 组合数库函数_Python数据分析之Numpy库(笔记)

    2.1 ndarray多维数组 2.1.1 创建ndarray数组 通过NumPy库的array函数,即可轻松地创建ndarray数组.NumPy库能将数据(列表,元组,数组,或其他序列类型)转换为n ...

  5. python计算样本方差_Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算...

    使用numpy可以做很多事情,在这篇文章中简单介绍一下如何使用numpy进行方差/标准方差/样本标准方差/协方差的计算. variance: 方差 方差(Variance)是概率论中最基础的概念之一, ...

  6. python 数据分析模块_Python数据分析之Numpy模块

    import Numpy as np ar=np.array([[1,3,5,7,9],[2,4,6,8,10]]) # Numpy.array中必须是数组 print(ar,type(ar)) # ...

  7. python定义空数组_在numpy数组中设置空值

    如何根据条件使numpy数组中的某些值为空? 我不明白为什么我最终得到的是0,而不是不满足条件的null或空值...b是用0和1值填充的numpy数组,c是另一个完全填充的numpy数组.所有阵列均为 ...

  8. python ndarray find_python – 从存储在NumPy ndarrays中的图像中查找特定(R,G,B)颜色值的(x,y)索引...

    我有一个存储在numpy数组中的图像,由imread()产生: >>> ndim array([[[ 0, 0, 0], [ 4, 0, 0], [ 8, 0, 0], ..., [ ...

  9. python tkinter画笑脸_python – 如何在tkinter窗口中绘制图像

    如何在tkinter窗口中绘制图像(我使用的是 python 3.3)?我正在寻找一个可以在tkinter窗口的给定位置绘制图像的语句. 是啊- 任何答案将不胜感激.这里是我想要使用代码的程序的源代码 ...

最新文章

  1. 可以使用的mysql和navigate
  2. 为什么很多程序员工作时都戴耳机?
  3. java设计模式--工厂模式
  4. 如何在钉钉上开发自己的应用_神操作!老妈让我告诉老板,双十一买钉钉。
  5. 工具类--日期工具类
  6. s5p4418 android 驱动 hal 应用之led 串口 rs485 can总线应用(app 有源码)
  7. 一个、说到所有的扩展指标
  8. 安卓微软雅黑字体ttf_618巨献丨精致的悦黑5字重小字体
  9. Web Service 简单实例(java 版本) ,IDE自动生成客户端代码方法
  10. CentOS安装CAS 5.3.4服务端
  11. 基于Web的建筑智能化系统集成组态软件的设计与应用
  12. 【Unity3d学习】魔鬼与牧师(动作分离版本)
  13. 第十九届泳联水中运动世锦赛
  14. Python常见面试题总结
  15. 【10.24】一个只属于程序员的节日
  16. 自动驾驶技术基础——惯导
  17. 【泰国留学】为什么“内卷”是必然,这就是原因
  18. 【P48】锂电池充电和电源自动切换
  19. 计算机上64位数和32位数,cad中32位和64位的区别是什么?
  20. 5G学习(四):PRACH专题

热门文章

  1. extjs 渲染之前的方法_Unity通用渲染管线(URP)系列(十一)——后处理(Bloom)...
  2. java net php_Java.netPHP比较 | php外包与php技术服务商
  3. 有没有词匹配算法_Google Ads 再次扩展了关键字变量匹配
  4. 在PHP中如何要json中的数据,如何在不知道键值的情况下在php中读取JSON数据
  5. mysql锿法_MySQL基本用法
  6. Shiro————核心设计思想
  7. linux挂载fc存储有超级坏块_Nand Flash基础知识与坏块管理机制的研究
  8. php 设置agent,限制某个目录禁止解析php及user_agent、php相关配置
  9. php post请求后端拿不到值_Ajax 提交POST后,后台php 无法获取$POST值
  10. mysql 回滚之后抛出异常_在PHP中 开始事务后,程序抛出异常 没有执行commit也没有执行rollback mysql事务会回滚吗?...