使用Python 3.4将XYZ格式转换为网格格式

时间:2014-10-20 16:59:43

标签: python python-3.x

我正试图想出一种转换XYZ数据的方法......

X   Y   Data

1   11  101

1   12  102

1   13  103 

1   14  104 

1   15  105 

2   11  101 

2   12  102

2   13  103 

2   14  104 

2   15  105 

3   11  101

3   12  102 

3   13  103 

3   14  104 

3   15  105 

4   11  101 

4   12  102 

4   13  103 

4   14  104

5   15  105 

5   11  101

5   12  102 

5   13  103 

5   14  104 

5   15  105 

看起来像这样的网格格式......

NAN 1    2   3   4   5

11  101 102 103 104 105

12  101 102 103 104 105

13  101 102 103 104 105

14  101 102 103 104 105

15  101 102 103 104 105

我最初尝试使用numpy模块,感觉就像数组操作的正确路径,但我似乎无法找出解决方案。任何想法或帮助指出我正确的方向是值得赞赏的。

1 个答案:

答案 0 :(得分:0)

您可以使用np.unique()获取X和Y的条目,如下所示:

import numpy as np

X = np.array([1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5])
Y = np.array([11, 12, 13, 14, 15, 11, 12, 13, 14, 15, 11, 12, 13, 14, 15, 11, 12, 13, 14, 15, 11, 12, 13, 14, 15])

Data = np.array([101, 102, 103, 104, 105] * 5)

res = Data.reshape((5, 5))
xvals = np.insert(np.unique(X), 0, 0)
yvals = np.array([np.unique(Y)]).T

print(np.vstack(([xvals], np.hstack((yvals, res)))))

请注意,我将0代替NaN,因为NaN仅支持numpy中的浮点数(请参阅here)。如果你真的想要NaN,我建议你使用float数组。否则,您可以始终将其置于某个永远不会发生的值(例如-1,如果您正在使用纯正数据)。或者它甚至不会影响该领域的内容。