gpt4 book ai didi

python - 如何将三个列表 x,y,z 转换为矩阵 z[x,y]?

转载 作者:行者123 更新时间:2023-11-28 21:42:59 25 4
gpt4 key购买 nike

给定三个大小相同的列表 x,y,z à la

x = [1, 0,.2,.2, 1, 0]
y = [0, 0, 0, 1,.2,.2]
z = [0, 2, 3, 1, 0, 1]

具有独特但不完整的 x,y 浮点值配对,如何将 z 映射到矩阵 Z[i,j] 其中i,j分别对应x,y的索引np.unique?在示例中,这将类似于

Z = [[ 2,  0,  3],
['', '', 1],
[ 1, 0, '']]

'' 也可能是 np.nan。这在某种程度上听起来像是一个反向的 np.meshgrid,我可以破解我自己的实现,但是没有预先存在的解决方案吗?

我尝试了建议 here , 但他们假设一个完整的网格。 Another solution听起来不错,但会插入缺失的点,这不是我想要的。

最佳答案

一种方法是——

m,n = np.max(x)+1, np.max(y)+1    
out = np.full((m,n), np.nan)
out[x,y] = z

sample 运行-

In [213]: x = [4,0,2,2,1,0]
...: y = [0,0,0,1,2,5]
...: z = [0,2,3,1,0,1]
...:

In [214]: m,n = np.max(x)+1, np.max(y)+1
...: out = np.full((m,n), np.nan)
...: out[x,y] = z
...:

In [215]: out
Out[215]:
array([[ 2., nan, nan, nan, nan, 1.],
[ nan, nan, 0., nan, nan, nan],
[ 3., 1., nan, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan],
[ 0., nan, nan, nan, nan, nan]])

对于浮点值,我们可以使用 np.unique(..return_inverse) 为每个 X 和 Y 提供唯一的 int ID,它可以用作行和列索引以索引到输出数组 -

x_arr = np.unique(x, return_inverse=1)[1]
y_arr = np.unique(y, return_inverse=1)[1]

m,n = np.max(x_arr)+1, np.max(y_arr)+1
out = np.full((m,n), np.nan)
out[x_arr,y_arr] = z

sample 运行-

In [259]: x = [1, 0,.2,.2, 1, 0]
...: y = [0, 0, 0, 1,.2,.2]
...: z = [0, 2, 3, 1, 0, 1]
...:

In [260]: x_arr = np.unique(x, return_inverse=1)[1]
...: y_arr = np.unique(y, return_inverse=1)[1]
...:
...: m,n = np.max(x_arr)+1, np.max(y_arr)+1
...: out = np.full((m,n), np.nan)
...: out[x_arr,y_arr] = z
...:

In [261]: out
Out[261]:
array([[ 2., 1., nan],
[ 3., nan, 1.],
[ 0., 0., nan]])

关于python - 如何将三个列表 x,y,z 转换为矩阵 z[x,y]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42923787/

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