将行替换为3D numpy数组中的另一行

时间:2015-07-15 20:32:27

标签: python arrays numpy

我正在尝试用文本文件中特定列的已知整数值行替换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,)

这是否可以在不必使用循环并单独更换每个循环的情况下完成?

1 个答案:

答案 0 :(得分:0)

错误消息告诉您几乎所有需要知道的事项:赋值左侧的数组切片的形状为(24,1,1),而右侧的形状为(24,) }。由于这些形状不匹配,numpy会引发ValueError

有两种方法可以解决这个问题:

  1. 制作LHS (24,)而不是(24, 1, 1)的形状。一个很好的方法是使用整数而不是最后两个维度的切片进行索引:

    s_array[:, 0, 0] = c_data
    
  2. 重塑c_data以匹配LHS的形状:

    s_array[:, 0:1, 0:1] = c_data.reshape(24, 1, 1)
    
  3. 我认为选项1更具可读性。