pythonnumpy初始化三维数组_numpy中的三维数组

正如人们常说的“顺序不重要,它只是一种约定”一样,当进入跨域接口时,这种约定就失效了,即从C排序转换到Fortran排序或其他排序方案。在这里,准确地说,数据是如何分层的,形状是如何在numpy中表示的非常重要。

默认情况下,numpy使用C排序,这意味着内存中的连续元素是存储在行中的元素。您还可以执行FORTRAN排序(“F”),这将根据列对元素进行排序,为连续元素编制索引。

Numpy的形状还有它自己的显示顺序。在numpy中,形状首先是最大的跨距,即在3d向量中,它将是最小连续维数、Z或页、第3维等。。。所以在执行时:

np.zeros((2,3,4)).shape

你会得到

(2,3,4)

实际上是(frames, rows, columns)。而做np.zeros((2,2,3,4)).shape则意味着(metaframs, frames, rows, columns)。当你想到像langauges那样用C创建多维数组时,这就更有意义了。对于C++,创建一个非连续定义的4D数组会导致^ {< CD6> }。这将强制您取消引用第一个数组,该数组包含所有其他数组(第4维),然后一直引用相同的数组(第3、第2、第1),从而产生如下语法:

double element = array4d[w][z][y][x]

在fortran中,这个索引顺序是相反的(x是第一个array4d[x][y][z][w]),大多数是连续的,而最不连续的,在matlab中,它变得很奇怪。

Matlab试图同时保留数学默认顺序(行、列),但在库内部也使用column major,而不遵循维度排序的C约定。在matlab中,您可以这样订购:

double element = array4d[y][x][z][w]

它将所有约定神化,并创建奇怪的情况,在这种情况下,您有时像按行排序,有时按列排序(例如使用矩阵创建)进行索引。

实际上,Matlab是最不直观的,而不是Numpy。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python使用VTK可视化三维数组的步骤与C++类似。以下是一些简单的步骤: 1. 导入必要的VTK库和模块。 ``` import vtk import numpy as np ``` 2. 创建一个numpy数组并将其转换为vtkImageData对象。 ``` dataArray = np.random.rand(xDim, yDim, zDim) # 创建一个随机数据的三维数组 imageData = vtk.vtkImageData() imageData.SetDimensions(xDim, yDim, zDim) # 设置vtkImageData对象的维度 imageData.SetOrigin(0, 0, 0) # 设置vtkImageData对象的原点 imageData.SetSpacing(1, 1, 1) # 设置vtkImageData对象的间距 vtkData = vtk.vtkFloatArray() # 创建vtkFloatArray对象 vtkData.SetNumberOfComponents(1) vtkData.SetNumberOfTuples(xDim * yDim * zDim) for i in range(xDim): for j in range(yDim): for k in range(zDim): value = dataArray[i][j][k] # 从数组获取数据 vtkData.SetValue(i * yDim * zDim + j * zDim + k, value) # 将数据添加到vtkFloatArray对象 imageData.GetPointData().SetScalars(vtkData) # 将vtkFloatArray对象添加到vtkImageData对象 ``` 3. 创建一个vtkImageActor对象并将vtkImageData对象添加到其。 ``` imageActor = vtk.vtkImageActor() imageActor.SetInputData(imageData) # 设置vtkImageData对象 ``` 4. 创建一个vtkRenderer对象并将vtkImageActor对象添加到其。 ``` renderer = vtk.vtkRenderer() renderer.AddActor(imageActor) # 添加vtkImageActor对象 ``` 5. 创建一个vtkRenderWindow对象并将vtkRenderer对象添加到其。 ``` renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) # 添加vtkRenderer对象 ``` 6. 创建一个vtkRenderWindowInteractor对象并将其与vtkRenderWindow对象关联。 ``` interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) # 设置vtkRenderWindow对象 ``` 7. 最后,初始化vtkRenderWindowInteractor对象并进入事件循环。 ``` interactor.Initialize() # 初始化vtkRenderWindowInteractor对象 renderWindow.Render() # 渲染vtkRenderWindow对象 interactor.Start() # 进入事件循环 ``` 以上就是使用VTK可视化三维数组的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值