用于打印的xyz列数据到网格

2024-09-28 01:30:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大量需要绘图的数据,这些数据以xyz数据的形式存储在3列中。我需要把列数据转换成一个网格,这样我就可以很容易地用matplotlib中的courtf来绘制它,我想知道是否有一个函数可以这样做,因为我自己编写的代码非常慢?在

x y z

1 1 10

1 2 12

2 1 14

2 2 16

像这样的网格:

^{pr2}$

Tags: 数据函数代码网格绘图matplotlib绘制形式
2条回答

纽比有点聪明。您可以只读取不同数组中的列,然后执行以下操作:

import numpy

idx1 = numpy.array([0, 0, 1, 1])
idx2 = numpy.array([0, 1, 0, 1])
data = numpy.array([10, 12, 14, 16])

grid = numpy.zeros(len(data)/2, 2)
grid[idx1, idx2] = data

>>>grid
array([[ 10.,  12.],
      [ 14.,  16.]])

请记住,索引从0开始,因此如果索引从1开始,则需要从每个元素中减除1。在

假设您的数据包含在data.txt中。以下代码将按正确的顺序打印出所需的数据部分。在

假设data.txt在连续的行中有x和{}坐标:

data.txt
x y z
1 1 10
1 2 12
2 1 14
2 2 16

def extract(filepath):
    f = open(filepath)
    f.readline() # to read out the first line that says "x y z"
    while 1:
        x = f.readline().strip().split()[-1]
        y = f.readline().strip().split()[-1]
        print x, y

请注意,当文件的所有内容都已处理(但仍将打印所有值)时,此操作将以异常结束。要避免这种情况,请将f = open(filepath)替换为with open(filepath) as f:

但是,如果data.txt的结构不是这样的,那么您需要利用每行中的前两个数字:

^{pr2}$

希望这有帮助

相关问题 更多 >

    热门问题