我有这个文本文件,我可以使用
numpy.loadtxt
将其读入二维数组:
X Y Z V
-30 -15 -25 2
-29 -15 -25 2.1
-28 -15 -25 2.2
. . . .
. . . .
+29 -15 -25 2.1
+30 -15 -25 -2.0
-30 -14 -25 2 # now iterating X values while Y=-14
-29 -14 -25 2.1
-28 . . 2.2
. . . .
. . . .
+29 -13 -25 2.1
+30 -13 -25 -2.0 # now iterating X values while Y=-13, and so on...
. . . .
. . . .
. . . .
. . . .
X、Y 和 Z 的范围不一定是整数,并且如上所示,在所有轴上并不相同。我想用这些数据创建一个网格,即获取这样的数组:
>>> np.shape(V)
(61,31,51)
>>> np.shape(x)
(61,)
>>> np.shape(y)
(31,)
>>> np.shape(z)
(51,)
我在这里看到了一个几乎相同的问题,但很明显看到那里的答案依赖于这样一个事实:
X
和Y
列包含从已知的正数开始的整数。
假设表格与 X、Y 和 Z 值的重复一致,您可以使用
np.unique
和 len
来计算结果数组应获得的形状。这是一个完整的工作代码:
import numpy as np
table = np.loadtxt("potential.csv", delimeter=",", skiprows=1)
x = np.unique(table[:,0])
y = np.unique(table[:,1])
z = np.unique(table[:,2])
potential = np.zeros((len(x), len(y), len(z)))
for i in range(len(z)):
for j in range(len(y)):
for k in range(len(x)):
index = k + j*len(x)+ i*len(y)*len(x)
potential[k,j,i] = table[index, 3]
np.reshape
不适合这种情况。为了在 index
的一维数组中获得正确的 table
,您必须利用在所有 X 值迭代后 Y 值发生更改的事实。因此,我们将 j
乘以 x
的长度。 Z 索引与 X 和 Y 长度的关系也是如此。