我无法从random.shuffle方法中捕获索引。 发生错误
TypeError: %d format: a number is required, not list
我的代码是
if __name__ =="__main__":
bell_nums = range(1,6)
pairs = list(itertools.combinations(bell_nums,2))
for pair in pairs:
bell_num1=int(pair[0])
bell_num2 = int(pair[1])
train_data = np.empty((0,12),float)
train_label = np.array([])
test_data = np.empty((0,12),float)
test_label = np.array([])
noise_nums = list(range(1,12))
level_nums = list(range(0,10))
random.shuffle(noise_nums)
nfft=2048
nceps = 12
for noise_nums_index in noise_nums[0:10]:
random.shuffle(level_nums)
files_name = glob.glob("learning_sample/%d_%d_%d.wav" % (bell_num1,noise_nums_index,level_nums))
for file_name in files_name:
feature = get_feature(files_name,nfft,nceps)
if len(train_data) ==0:
train_data=feature
else:
train_data=np.vstack((train_data,feature))
train_label=np.append(train_label,bell_num1)
files_name="learning_sample/%d_%d_%d.wav"% (bell_num1,noise_num,level_nums[8])
feature = get_feature(file_name,nfft,nceps)
if len(test_data) ==0:
test_data=feature
else:
test_data=np.vstack((test_data,feature))
test_label=np.append(test_label,bell_num1)
我认为level_nums
是列表类型,因此会发生此错误。
但在这种情况下,我无法想出从random.shuffle方法中捕获索引的方法。
我想命名" learning_sample /%d_%d_%d.wav"这个文件是通过随机使用noise_nums_index的数字和level_nums的数字。在这种情况下,我该如何命名这部分?我怎么写这个?我应该用random.shuffle(level_nums)
的语句吗?
答案 0 :(得分:1)
要在level_nums
中选择随机元素,您应该使用:random.choice(level_nums)
在您的代码中:
for noise_nums_index in noise_nums[0:10]:
files_name = glob.glob("learning_sample/%d_%d_%d.wav" % (bell_num1,noise_nums_index,random.choice(level_nums)))
请注意,由于noise_nums
未在您提供的代码中定义,因此我无法检查完整代码。可能还有其他一些错误。
答案 1 :(得分:0)
您可以使用标准python库中的random.randrange方法。
例如:
return ('sessionid' in request.cookies)
或random.choice方法:
random.randrange(1, 12, 1)
答案 2 :(得分:0)
level_nums
是一个列表,您将其指向%d
格式字符串。
如果你只是在寻找一个随机的int,并且因为你已经在使用numpy,你考虑过使用np.random.choice()
吗?这样就不需要使用shuffle方法了。
>>> np.random.choice(level_nums)
3
>>> np.random.choice(level_nums)
8
或者只是随机int函数并完全摆脱level_nums
>>> np.random.randint(1, 11)
6