【发布时间】:2015-11-21 19:37:12
【问题描述】:
我在 3d 中有网格点,我想使用 python 基于 (x,y,z) 对它们进行排序(如果可能避免循环)..
例如,如果输入是,
(1,2,1), (0,8,1), (1,0,0) ..
那么输出应该是
(0,8,1), (1,0,0), (1,2,1)..
很抱歉这条支线,但我实际上正在做的是从具有以下方式的数据的文件中读取:
x y z f(x) f(y) f(z)..
我正在做的事情是:
def fill_array(output_array,source_array,nx,ny,nz,position):
for i in range(nx):
for j in range(ny):
for k in range(nz):
output_array[i][j][k] = source_array[i][j][k][position]
nx = 8
ny = 8
nz = 8
ndim = 6
x = np.zeros((nx,ny,nz))
y = np.zeros((nx,ny,nz))
z = np.zeros((nx,ny,nz))
bx = np.zeros((nx,ny,nz))
by = np.zeros((nx,ny,nz))
bz = np.zeros((nx,ny,nz))
data_file = np.loadtxt('datafile')
f = np.reshape(data_file, (nx,ny,nz,ndim))
fill_array(x,f,nx,ny,nz,0))
fill_array(y,f,nx,ny,nz,1)
fill_array(z,f,nx,ny,nz,2)
fill_array(fx,f,nx,ny,nz,3)
fill_array(fy,f,nx,ny,nz,4)
fill_array(fz,f,nx,ny,nz,5)
当数据被安排(如前所述)时工作正常,但文件写入不按顺序,这会在以后的绘图中产生问题。有没有更好的方法来做到这一点?当然我只想把x,y,z排好,然后把函数值f(x),f(y),f(z)关联到它的正确位置(x,y,z)
两个更新
1) 当我使用 x、y、z、fx、fy、fz 或 f 进行排序时,出现以下错误。
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
2)我需要它以这种特定方式,因为我使用 mayavi 然后用于 contour3d
【问题讨论】:
-
如果点是列表中三个数字的序列(列表或元组),命名为
points,只需使用sorted(points)。 -
谢谢。能否请您检查更新后的问题并提出您的建议。
-
更新后的问题是一个完全不同的问题。 SO线程不应该是实时聊天......我建议为此切线提出一个新问题。在新问题中,显示您的源数据(文件)和目标格式(对于 Mayavi),并显示您当前如何尝试从 A 到 B。
-
@kwinkunks 首先我不认为它是完全相切的。问题仍然是关于数据的排序,因为我知道该情节适用于有序数据。接下来,我只能在 90 分钟内询问一次。
-
@kwinkunks stackoverflow.com/questions/33848595/…
标签: python sorting numpy datagrid mayavi