我正在尝试用文本文件中特定列的已知整数值行替换3-D数组(用NaN's填充)中的特定行NaN(例如:第8列的24行)。有没有一种方法可以执行此替换,我在寻求帮助时错过了?
我最近的试用代码(很多)如下:
import numpy as np
tfile = "C:\...\Lee_Gilmer_MEM_GA_01_02_2015.txt"
data = np.genfromtxt(tfile, dtype=None)
#creation of empty 24 hour global matrix
s_array = np.empty((24,361,720))
s_array[:] = np.NAN
#Get values from column 8
c_data = data[:,7]
#Replace all 24 NaN's slices of row 1 column 1 with corresponding 24 row values from column 8
s_array[:,0:1,0:1] = c_data
print s_array
这会产生以下结果:
ValueError: could not broadcast input array from shape (24) into shape (24,1,1)
当我打印出c_data
的形状时,我得到:
(24L,)
这是否可以在不必使用循环并单独更换每个循环的情况下完成?
答案 0 :(得分:0)
错误消息告诉您几乎所有需要知道的事项:赋值左侧的数组切片的形状为(24,1,1)
,而右侧的形状为(24,)
}。由于这些形状不匹配,numpy会引发ValueError
。
有两种方法可以解决这个问题:
制作LHS (24,)
而不是(24, 1, 1)
的形状。一个很好的方法是使用整数而不是最后两个维度的切片进行索引:
s_array[:, 0, 0] = c_data
重塑c_data
以匹配LHS的形状:
s_array[:, 0:1, 0:1] = c_data.reshape(24, 1, 1)
我认为选项1更具可读性。