我必须使用遍历100的for循环来降低数组的密度,并将原始数组的值复制到新数组中:
soundDataHere是[7][22000]
暗数组,我希望cleanSoundData是[7][220]
暗数组
def reduceDensity(soundDataHere):
for i in range(numberOfFiles):
for j in range(0, soundDataHere[i].size-1, 100):
cleanSoundData.extend(soundDataHere[i][j])
我一直不知道如何在foor循环中使用append和extend函数来重新创建密度较小的新数组。
示例:[[1,2,3,4,5],[6,7,8,9,10]]
和step = 2
应该在我的新cleanSoundData数组中返回[[1,3,5],[6,8,10]]
但仅像[1,3,5,6,8,10]
答案 0 :(得分:0)
使用Numpy和您的示例:
import numpy as np
l = [1,3,5,6,8,10]
l2 = np.reshape(l,[2,-1])
>>> l2
array([[ 1, 3, 5],[ 6, 8, 10]])
您似乎正在处理声音数据,因此我强烈建议您使用numpy模块,因为矢量化数组操作将比对Python对象使用for循环快得多(在某些情况下,速度可提高100倍)。>
Numpy模块是专门为这类用例设计的,因此,我鼓励您学习如何使用它。
答案 1 :(得分:0)
也许您应该尝试创建两个不同的临时列表对象,在其中,您只需在for循环之后将所需元素“扩展”到其中的每个元素(即右侧和左侧子列表)中。然后“附加”这两个列表,而不是在cleanSoundData中扩展。
答案 2 :(得分:0)
假设数组soundData
是7 X 22000
,其中包含您的数据。因此,可以按照以下步骤创建大小为cleanSoundData
的新数组7 x 220
。甚至更笼统地说是2 x 1000
还是1000 x 50000
。
cleanSoundData = []
for i in range(len(soundData)):
cleanSoundData.append([]) # adding new row
for j in range(0, len(soundData[i]), 100):
cleanSoundData[i].append(soundData[i][j]) # adding data to the row
希望这对您有用。