首页 > 解决方案 > 如何将 z 值插入 x,y 坐标?

问题描述

我有三个列表,其中有一些重复的值。我将它们用作 x 和 y 坐标。因此,我的第三个列表对应于我想要绘制为热图的值。现在,我只能为一个列表分配 z 的值,我怎样才能创建一个 for 循环来为网格的其余部分做同样的事情?

x = [1,1,1,2,2,2,3,3,3]
y = [1,2,3,1,2,3,1,2,3]
z = [5.9617e-09,6.3562e-09,6.819e-09,7.3562e-09,7.989e-09,8.6735e- 
09,9.3898e-09,1.0139e-08,1.0912e-08,1.0912e-08]

xs = len(set(x))
ys = len(set(y))

grid = []
counter = 0

for row in range(ys):
   rows = [] # creating the rows on the grid
   if len(rows) < ys: # I want to loop over ys and assign the values os z to each coordinate
       grid.append(z[counter])
       counter = counter+1
print(grid)

一旦我有一个二维数组,我就可以使用热图很好地绘制它。

标签: python-3.x

解决方案


最简单的方法是使用numpy

In [1]: z = [5.9617e-09,6.3562e-09,6.819e-09,7.3562e-09,
             7.989e-09,8.6735e-09,9.3898e-09,1.0139e-08,
             1.0912e-08,1.0912e-08] 

In [2]: len(z)                                                 
Out[2]: 10

In [3]: import numpy as np

十个数字不适合 3x3 网格,所以跳过最后一个。

In [4]: nz = np.array(z[:-1])                                                                            
Out[4]: 
array([5.9617e-09, 6.3562e-09, 6.8190e-09, 7.3562e-09, 7.9890e-09,
       8.6735e-09, 9.3898e-09, 1.0139e-08, 1.0912e-08])

In [5]: nz.reshape((3,3))                                                                                
Out[5]: 
array([[5.9617e-09, 6.3562e-09, 6.8190e-09],
       [7.3562e-09, 7.9890e-09, 8.6735e-09],
       [9.3898e-09, 1.0139e-08, 1.0912e-08]])

使用itertoolsand的普通 Python 解决方案functools

In [6]: import itertools as it 
   ...: import functools as ft                                                                           

In [7]: def chunked(iterable, n):  # {{{1 
   ...:     def take(n, iterable): 
   ...:         return list(it.islice(iterable, n)) 
   ...:     return iter(ft.partial(take, n, iter(iterable)), []) 
   ...: 

In [8]: list(chunked(z[:-1], 3))                                                                         
Out[8]: 
[[5.9617e-09, 6.3562e-09, 6.819e-09],
 [7.3562e-09, 7.989e-09, 8.6735e-09],
 [9.3898e-09, 1.0139e-08, 1.0912e-08]]

推荐阅读