我正在尝试创建x,y,z坐标以生成高程数据集。 我能够用meshgrid创建x,y,z数组-其中z是一个常数值。
(这是我先前提出的问题的后续内容,我是python的新手)
我还想创建一个倾斜的地形,其中z取决于x。
我能够用正确的z值创建一个数组。但是,当尝试使用zip工具将三个数组(x,y,z)组合为坐标时,出现此错误:
TypeError Traceback (most recent call last)
<ipython-input-81-6454cf2caa60> in <module>
3 for a, b, c in zip(x_mesh, y_mesh, z_int):
4 for a1, b1, c1 in zip(a, b, c):
----> 5 for a2, b2, c2 in zip(a1, b1, c1):
6 coords.append((a2, b2, c2,))
TypeError: zip argument #1 must support iteration
下面的代码是针对小区域的测试,用于在更大的区域上创建坡度。
我认为可能最初是因为我的z数组处于float而不是int的原因,所以我对其进行了转换,但没有任何区别。
我的代码以z为常数将z合并到meshgrid中,并且coords []代码在该实例中运行良好。
sp=(10)
x=np.arange(313000, 333000, sp)
y=np.arange(6220000,6227000, sp)
z=15
x_mesh, y_mesh, z_mesh=np.meshgrid(x,y,z)
coords = []
for a, b, c in zip(x_mesh, y_mesh, z_mesh):
for a1, b1, c1 in zip(a, b, c):
for a2, b2, c2 in zip(a1, b1, c1):
coords.append((a2, b2, c2,))
但是,当我尝试使z依赖于x并且不将其包含在meshgrid进程中时,“ coords = []”部分返回了错误: TypeError:zip参数1必须支持迭代
import numpy as np
sp=10
svx=313000
evx=313040
x=np.arange(svx,evx,sp)
y=np.arange(6220000,6220040,sp)
x_mesh, y_mesh =np.meshgrid(x,y)
evz=-30
totalnosteps=((evx-svx)/sp)-1
nosteps=((x_mesh-svx)/sp)
dedep=(evz/totalnosteps)
z=nosteps*dedep
z_int=z.astype(int)
coords = []
for a, b, c in zip(x_mesh, y_mesh, z_int):
for a1, b1, c1 in zip(a, b, c):
for a2, b2, c2 in zip(a1, b1, c1):
coords.append((a2, b2, c2,))
我的最终结果是(x,y,z)
答案 0 :(得分:0)
删除
for a2, b2, c2 in zip(a1, b1, c1):
部分,然后重写coords.append
coords.append(a1, b1, c1)
关于“需要可迭代”的错误是因为当您遍历zip(a,b,c)时,会得到一个整数元组,而不是np.array元组。
答案 1 :(得分:0)
在这两个代码版本中,您的形状有所不同。您可以使用下面的代码获取信息:
print(x_mesh.shape)
print(y_mesh.shape)
print(z_mesh.shape)
# code version one's output
(700, 2000, 1)
(700, 2000, 1)
(700, 2000, 1)
# code version two's output
(4, 4)
(4, 4)
(4, 4)
为了解决此问题,您可以使用下面的代码添加一个维度
x_mesh = x_mesh[..., None]
y_mesh = y_mesh[..., None]
z = z[..., None]