Python 广播4D numpy阵列

Python 广播4D numpy阵列,python,numpy,Python,Numpy,我面临着将处理后的4D NumPy阵列广播到4D阵列的问题。我比较了尺寸,以检查尺寸是否有问题。我不明白怎么了 train_path = files train_file_names = os.listdir(train_path) train_file_names.sort(key=lambda x: int(x.partition('.')[0])) seg_num = 60 seg_len = 2 sample_num = len(df) data = np.zeros((seg_num*

我面临着将处理后的4D NumPy阵列广播到4D阵列的问题。我比较了尺寸,以检查尺寸是否有问题。我不明白怎么了

train_path = files
train_file_names = os.listdir(train_path)
train_file_names.sort(key=lambda x: int(x.partition('.')[0]))
seg_num = 60
seg_len = 2
sample_num = len(df)
data = np.zeros((seg_num*100, 496, 64, 1))
label = np.zeros((seg_num * sample_num,))

for i, file_name in enumerate(train_file_names):
        sr, sound_file = wavfile.read(train_path + file_name)
        # print(train_path+file_name)
        length = sr * seg_len           # 5s segment
        range_high = len(sound_file) - length
        print(range_high, length)
        random_start = np.random.randint(range_high, size=seg_num)
        print("i", i)
        for j in range(seg_num):
            cur_wav = sound_file[random_start[j]:random_start[j] + length]
            cur_wav = cur_wav / 32768.0
            cur_spectro = preprocess_sound(cur_wav, sr)
            #print(cur_spectro.shape)
            cur_spectro = np.copy(np.expand_dims(cur_spectro, 3))
            print("cur_spectro",cur_spectro.shape)
            print("data", data.shape)
            print(data[i * seg_num + j, :, :, :].shape)
            data[i * seg_num + j, :, :, :] = cur_spectro
            label[i * seg_num + j] = df['class'][i]
输出

88200 88200
i 0
cur_spectro (0, 496, 64, 1)
data (6000, 496, 64, 1)
(496, 64, 1)
<ipython-input-226-30eefc542ce4> in loading_data(files, df)
      29                 print("data", data.shape)
      30                 print(data[i * seg_num + j, :, :, :].shape)
 ---> 31                 data[i * seg_num + j, :, :, :] = cur_spectro
      32                 label[i * seg_num + j] = df['class'][i]
      33 ValueError: could not broadcast input array from shape (0,496,64,1) into shape (496,64,1)
8820088200
i 0
cur_spectro(0496,64,1)
数据(6000、496、64、1)
(496, 64, 1)
正在加载_数据(文件、df)
29打印(“数据”,数据.形状)
30打印(数据[i*seg_num+j,:,:,:]形状)
--->31数据[i*seg_num+j,:,:,:]=电流谱
32标签[i*seg_num+j]=df['class'][i]
33 ValueError:无法将输入数组从形状(0496,64,1)广播到形状(496,64,1)

您的打印输出之一是
cur\u spectro(0496,64,1)

看 它包含了一个描述,说明了当 其中一个数组维度是。 这实际上意味着所讨论的数组是空的

看起来您试图将空数组复制到 非空数组。在这种情况下,不能使用这些阵列 对齐(广播),引发异常

正如你可以在其中一条评论中看到的那样,分析原因 preprocess_sound函数返回空数组

也许您应该在代码中添加一个检查 cur_spectro的尺寸为零,并且 在这种情况下,你要么跳过有问题的指令,要么
将一些“代理”内容复制到目标数组。

您不明白什么?为什么维度为0的数组不能放入
数据片中,或者
cur\u spectro
为什么维度为0。问题可追溯到
预处理\u声音
步骤。@hpaulj感谢您的回复。是的,问题在于预处理步骤。谢谢你指出。