作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定三个大小相同的列表 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/
我是一名优秀的程序员,十分优秀!