python-3.x - 如何将 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)
一旦我有一个二维数组,我就可以使用热图很好地绘制它。
解决方案
最简单的方法是使用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]])
使用itertools
and的普通 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]]
推荐阅读
- terraform - 从 for_each 中访问模块(避免循环)
- javascript - flex 项目在悬停时改变它的标题位置,而它不应该
- apache-spark - 在 PySpark 中读取嵌套的 Json 结构
- r - 决策树的“不能对不存在的列进行子集化”
- postgresql - 如何获得与 Liquibase 一起使用的 postgresql string_to_array 函数
- android - 显示 ContextMenu 时未调用 Activity.dispatchGenericMotionEvent
- graphql-java - graphql-java SPQR:如何使用@GraphQLUnion 注解?
- javascript - 如何创建可用作 h1、h2、h3、h4..etc 的 Typography 组件
- ruby-on-rails - IO.pipe(Encoding::BINARY, Encoding::BINARY) 因 UndefinedConversionError 而失败,但仅在 Rails 下
- python - 将插槽连接到来自类派生的所有对象的信号