gpt4 book ai didi

python - 如何将数组中的值分配给 (x,y) 点

转载 作者:行者123 更新时间:2023-11-30 23:26:32 25 4
gpt4 key购买 nike

我有 3600 个 x 值和 3600 个 y 值。和一个数组 (180x20)。我需要将其绘制为轮廓图,并将第一个 x 值和第一个 y 值分配给第一个数组值 (A[0,0]) 等等...我该怎么做?

我的想法:

x,y = np.meshgrid(x,y)
plt.contourf(x,y,A)

不起作用:类型错误:x的形状与z的形状不匹配:找到(3600, 3600)而不是(180, 20)。我理解这个错误,但不知道如何解决它。

最佳答案

我认为您对网格网格的作用有点困惑。听起来你只是想 reshape

numpy.meshgrid的解释

作为网格网格功能的示例,假设我们有一个由“z”值组成的 5x5 网格:

import numpy as np
z = np.random.random((5,5))

我们有行的 x 坐标和列的 y 坐标:

ny, nx = z.shape
x = np.linspace(5, 7, nx)
y = np.linspace(-2, 8, ny)

print '-----Z-----\n', z, '\n'
print '-----X-----\n', x, '\n'
print '-----Y-----\n', y, '\n'

所以,此时,我们有:

-----Z-----
[[ 0.70319561 0.0141277 0.17580355 0.20411183 0.81714624]
[ 0.45093838 0.18241847 0.27477369 0.4881957 0.62157783]
[ 0.83172549 0.75278372 0.64856436 0.76651935 0.0152465 ]
[ 0.50908933 0.51557264 0.9975723 0.39579782 0.71333262]
[ 0.58998339 0.59205064 0.42716255 0.14138964 0.38212301]]

-----X-----
[ 5. 5.5 6. 6.5 7. ]

-----Y-----
[-2. 0.5 3. 5.5 8. ]

numpy.meshgrid 旨在获取列和行坐标的一维数组,并将它们转换为与 z 形状匹配的二维数组:

yy, xx = np.meshgrid(y, x)

print '-----XX----\n', xx, '\n'
print '-----YY----\n', yy, '\n'

这会产生:

-----XX----
[[ 5. 5. 5. 5. 5. ]
[ 5.5 5.5 5.5 5.5 5.5]
[ 6. 6. 6. 6. 6. ]
[ 6.5 6.5 6.5 6.5 6.5]
[ 7. 7. 7. 7. 7. ]]

-----YY----
[[-2. 0.5 3. 5.5 8. ]
[-2. 0.5 3. 5.5 8. ]
[-2. 0.5 3. 5.5 8. ]
[-2. 0.5 3. 5.5 8. ]
[-2. 0.5 3. 5.5 8. ]]

使用您拥有的数据

如果我理解正确的话,你的 x 和 y 数组都是 3600 个元素的列表,你的 z 数组是 180x20。 (请注意 180 * 20 == 3600)因此,我认为您拥有的数据相当于执行以下操作:

yourx, youry = xx.flatten().tolist(), yy.flatten().tolist()

显然,您的数据要大得多,但如果我们扩展上面的示例,它将看起来像:

---yourx---
[5.0, 5.0, 5.0, 5.0, 5.0, 5.5, 5.5, 5.5, 5.5, 5.5, 6.0, 6.0, 6.0, 6.0, 6.0, 6.5, 6.5, 6.5, 6.5, 6.5, 7.0, 7.0, 7.0, 7.0, 7.0]

---youry---
[-2.0, 0.5, 3.0, 5.5, 8.0, -2.0, 0.5, 3.0, 5.5, 8.0, -2.0, 0.5, 3.0, 5.5, 8.0, -2.0, 0.5, 3.0, 5.5, 8.0, -2.0, 0.5, 3.0, 5.5, 8.0]

因此,您只需将列表 reshape 为与 z 形状相同的二维数组。例如:

print np.reshape(yourx, z.shape)

产量

[[ 5.   5.   5.   5.   5. ]
[ 5.5 5.5 5.5 5.5 5.5]
[ 6. 6. 6. 6. 6. ]
[ 6.5 6.5 6.5 6.5 6.5]
[ 7. 7. 7. 7. 7. ]]

换句话说,您想要:

plt.contourf(np.reshape(yourx, z.shape), np.reshape(youry, z.shape), z)

关于python - 如何将数组中的值分配给 (x,y) 点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com