首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >广播4D numpy阵列

广播4D numpy阵列
EN

Stack Overflow用户
提问于 2020-10-12 16:31:15
回答 1查看 148关注 0票数 0

我面临的问题是将处理过的4D NumPy数组广播成4D数组。我比较了尺寸,以检查尺寸有什么问题。我不明白是怎么回事。

代码语言:javascript
复制
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]

输出

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-12 18:16:45

您的打印输出之一是cur_spectro (0, 496, 64, 1)

参见What does a numpy shape starting with zero mean,它包含了如何理解数组维度之一为的情况的描述。这实际上意味着所讨论的数组是

因此,看起来您试图将空数组复制到非空数组中。由于在这种情况下,这些数组无法对齐(广播),则会引发异常。

正如您可以在其中一个注释中读取一样,分析为什么preprocess_sound函数返回为空数组。

也许您应该在代码中添加检查cur_spectro的第一个维度是否为零,在这种情况下,您应该跳过违规指令,或者将一些“代理”内容复制到目标数组中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64321736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档