gpt4 book ai didi

python - 将列表转换为 NumPy 数组

转载 作者:行者123 更新时间:2023-11-28 18:13:05 26 4
gpt4 key购买 nike

我有一个包含 2000 行和 88200 列的列表:

testlist = list(split_audio_to_parts(audio, self.sample_rate, self.audio_index))

teSTList 的调试输出给出

[array([-0.00683594, -0.00689697, -0.00708008, ...,  0.        ,
0. , 0. ]), array([-0.01287842, -0.01269531, -0.01257324, ..., 0. ,
0. , 0. ]), array([0.02288818, 0.01940918, 0.01409912, ..., 0. , 0. ,
0. ]), array([0.00772095, 0.00671387, 0.00695801, ..., 0. , 0. ,
0. ]),

等等。split_audio_to_parts 是一个函数:

def split_audio_to_parts(x, sample_rate, audio_index):
for i, row in audio_index.iterrows():
x_part = x[int(row['start_samples']):int(row['end_samples'])]
yield x_part

当我尝试使用 samples = np.array(teSTList)samples = np.asarray(teSTList) 将其转换为 numpy 数组时,它给出了数组形状 (2000,),尽管调试显示 teSTList 包含 2000 个条目和 88200 个位置。为什么这样?我正在使用 64 位 numpy 和 64 位 Python 3.6.5。

最佳答案

问题是 teSTList 是不同大小数组的列表。例如检查这段代码:

>>>import numpy as np
>>>import random
>>>random.seed(3240324324)
>>> y=[np.array(list(range(random.randint(1,3)))) for _ in range(3)]
>>> y
[array([0, 1, 2]), array([0, 1, 2]), array([0])]
>>> np.array(y)
array([array([0, 1, 2]), array([0, 1, 2]), array([0])], dtype=object)
>>> np.array(y).shape
(3,)

数组将是object 类型而不是float。唯一可行的方法是使用相同大小的数组。

如果您确实需要以某种方式将这些行填充到一个数组中,您可以用零填充,例如:

>>> size = y[max(enumerate(y),key=lambda k:k[1].shape)[0]].shape[0]
>>> z=[np.append(x,np.zeros(size-x.shape[0])) for x in y]
>>> z
[array([ 0., 1., 2.]), array([0, 1, 2]), array([0, 0, 0])]
>>>np.array(z).shape
(3, 3)

但您必须决定如何执行此填充。

关于python - 将列表转换为 NumPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50068431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com