10python的ValueError: output array is read-only

仅作为记录,大佬请跳过。

博主在运行程序时,出现这种错误:

(程序是获取一个音频文件数据data之后,想对data的值进行归一化)
在这里插入图片描述
说明数据是只读,不可修改。

查看

(此程序只做说明,不能运行,因为有个写的包soundBase)

from soundBase import *
from end_detection import *

data, fs = soundBase('C4_1_y.wav').audioread()
data /= np.max(data)

通过data.flags,查看data的状态,发现

from soundBase import *
from end_detection import *

data, fs = soundBase('C4_1_y.wav').audioread()
print(data.flags)
data /= np.max(data)

发现“写操作”被禁止了:

在这里插入图片描述


而平常可写的例子:(此程序可直接运行)

import numpy as np

x=np.random.rand(5)
print(x.flags)
print('ok')

这个的WRITEABLE是True:
在这里插入图片描述

——————————————————————————————————

初步解决:

加入

b = np.frombuffer(data, dtype='int16')
c = b.copy()
print(c.flags)

即:

在这里插入图片描述

参考两个大佬博主解决方案的博文:

传送门1

传送门2

————————————————————————————————————————————————

最终解决

新建一个temp变量,让不可改变的data操作后仍不放在data里,而是放在temp里

在这里插入图片描述
(最后data=tempp这个为什么能赋给data值,博主还没有搞懂。)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值