如何在numpy数组中XYZ位置的csv文件中插入浮点值

时间:2019-04-25 16:21:03

标签: python csv numpy

我需要将CSV文件中XYZ(int)处的Value(Float)插入world = numpy.zeros((360,360,360))

CSV文件中的行示例:

Value   X   Y   Z
4.5396  159 159 1
4.5905  182 160 3
etc

我在CSV文件中大约有16000行,尽管很多行都是重复的。

我的主要问题是我需要使用Integers(XYZ)在Numpy中插入一个Float(Value),在该处它拒绝同时处理这两个值,并且我也尝试过对Pandas进行操作,但存在相同的问题。

在这里,我已将其全部转换为整数,这是使它正常运行的唯一方法。

world = numpy.zeros((360,360,360))
data = numpy.genfromtxt('Myfile.csv', delimiter=',',skip_header=1) 
for Value,X, Y, Z in data.astype(int):
         world[X, Y, Z] = Value

应该看起来像这样

world[159,159,1] = 4.5369
world[182,160,3] = 4.5945 

但是我只能得到这个

world[159,159,1] = 4
world[182,160,3] = 4

其他所有情况都会导致各种错误

1 个答案:

答案 0 :(得分:0)

执行此操作:

world = numpy.zeros((360,360,360))
data = numpy.genfromtxt('Myfile.csv', delimiter=',', skip_header=1) 
X, Y, Z = data[:, 1:].astype(int).T
world[X, Y, Z] = data[:, 0]

或者直接以正确的类型读取文本数据:

world = numpy.zeros((360,360,360))
data = numpy.genfromtxt('Myfile.csv', delimiter=',', skip_header=1,
                        dtype=[('Value', float), ('X', int), ('Y', int), ('Z', int)]) 
world[data['X'], data['Y'], data['Z']] = data['Value']