Python 将一个数组放入另一个数组时出现 ValueError
Python ValueError when putting one array into another
我正在尝试将一个数组插入另一个数组,但我认为我遇到了数组的尺寸问题,导致了 ValueError。我尝试插入的指数段在 EXP 中有效并按我的预期打印,但 运行 len() 在其上 returns 1. 为什么一个数组打印有多个元素return len() 为 1?下面的代码片段:
SPR = 48000 # Hz
duration = 0.2 # second
t = numpy.linspace(0, duration, duration * SPR)
p_list = [0, numpy.pi, 0]
SIGNALS = [(16000 * numpy.sin((2 * numpy.pi * t * 20) + p)).astype('int16')
for p in p_list]
EXP = [(16000 * (2**(-100*t))).astype('int16')]
e=EXP[0:4200]
print(e)
print(len(e))
SIGNALS[0][600:4800] = e
returns
[array([16000, 15976, 15953, ..., 0, 0, 0], dtype=int16)]
1
Traceback (most recent call last):
File "/home/pi/Experiments/actronika-exp.py", line 87, in <module>
SIGNALS[0][600:4800] = e
ValueError: setting an array element with a sequence.
[array([16000, 15976, 15953, ..., 0, 0, 0], dtype=int16)]
这个 (e
) 是 python 列表中的一个 numpy 数组。 len(e)
returns 列表的长度,是 1,因为它包含 1 个元素:numpy 数组
问题是您在执行以下操作时将数组插入到列表中:
X = [np.array([0, ...])]
因此 X 是一个包含数组的列表,我认为你应该这样做:
X = np.array([0, ...])
然而,如果你需要列表里面的数组,你应该改变这一行
e=EXP[0:4200]
到
e=EXP[0][0:4200]
现在您正在获取列表 EXP 内的第一个数组。
我正在尝试将一个数组插入另一个数组,但我认为我遇到了数组的尺寸问题,导致了 ValueError。我尝试插入的指数段在 EXP 中有效并按我的预期打印,但 运行 len() 在其上 returns 1. 为什么一个数组打印有多个元素return len() 为 1?下面的代码片段:
SPR = 48000 # Hz
duration = 0.2 # second
t = numpy.linspace(0, duration, duration * SPR)
p_list = [0, numpy.pi, 0]
SIGNALS = [(16000 * numpy.sin((2 * numpy.pi * t * 20) + p)).astype('int16')
for p in p_list]
EXP = [(16000 * (2**(-100*t))).astype('int16')]
e=EXP[0:4200]
print(e)
print(len(e))
SIGNALS[0][600:4800] = e
returns
[array([16000, 15976, 15953, ..., 0, 0, 0], dtype=int16)]
1
Traceback (most recent call last):
File "/home/pi/Experiments/actronika-exp.py", line 87, in <module>
SIGNALS[0][600:4800] = e
ValueError: setting an array element with a sequence.
[array([16000, 15976, 15953, ..., 0, 0, 0], dtype=int16)]
这个 (e
) 是 python 列表中的一个 numpy 数组。 len(e)
returns 列表的长度,是 1,因为它包含 1 个元素:numpy 数组
问题是您在执行以下操作时将数组插入到列表中:
X = [np.array([0, ...])]
因此 X 是一个包含数组的列表,我认为你应该这样做:
X = np.array([0, ...])
然而,如果你需要列表里面的数组,你应该改变这一行
e=EXP[0:4200]
到
e=EXP[0][0:4200]
现在您正在获取列表 EXP 内的第一个数组。