如何基于Numpy数组构建3维张量并绘制对应结构示意图
核心问题说明
ax.scatter()要求输入的x、y、z三个参数数组形状完全一致,你当前生成的row、col为5×5结构,layer为3×2结构,形状不匹配所以触发运行报错。- scatter是散点绘制接口,仅能绘制对应坐标的离散点,无法生成你需要的立方体式三维张量结构。
正确实现方案
使用matplotlib的voxels接口绘制三维体素结构,完美匹配张量的可视化需求,示例代码如下:
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm # 定义张量的维度:行、列、层数量,可根据实际需求修改 ROW_CNT = 5 COL_CNT = 5 LAYER_CNT = 3 # 生成三维体素网格,所有位置默认显示(值为True) voxels = np.ones((ROW_CNT, COL_CNT, LAYER_CNT), dtype=bool) # 生成坐标网格 x, y, z = np.indices(voxels.shape) # 按层设置不同颜色,方便区分张量的不同层 colors = np.empty(voxels.shape, dtype=object) for layer in range(LAYER_CNT): colors[:, :, layer] = cm.get_cmap('viridis')(layer / LAYER_CNT) # 绘制张量结构 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.voxels(x, y, z, voxels, facecolors=colors, edgecolor='white') # 设置坐标轴标签 ax.set_xlabel('行') ax.set_ylabel('列') ax.set_zlabel('层') plt.show()
效果说明
运行代码后会生成分层的三维立方体张量结构,和你需要的示例图效果一致,你可以拖拽画布旋转查看不同视角,若需要展示张量内部的数值,可以将数值映射到对应体素的颜色透明度或色值上即可。
内容的提问来源于stack exchange,提问作者AdemxKartal
相关产品推荐
相关产品推荐

