Python:规范化多维数组

2024-09-30 01:20:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有代码来生成和导出12个立体声波形

目前我只是在做:

for i in range(0,12):
    filename = "out_%d.wav" % i
    L = ... some list of floats between -1.0 and +1.0 ...
    R = ... similarly ...

    exportWAV(filename,L,R)

但音量太小了。在

我要做的是找出所有L&R的最大体积,然后用这个体积除以所有L&R。那么我所有的值都在-1和1之间。在

这不是一个困难的任务,我可以用一些难看的代码来完成它。在

但如何做到干净利落呢?在

我应该可以用几行来完成,比如:

^{pr2}$

但我不知道如何将这些伪代码转换为实际有效的Python。每个元组的数组都在一个元组的数组上进行运算。在

我觉得我只是想省去几行代码,让它变得比需要的更困难。在

编辑:感谢下面的回答,我现在有了以下工作代码:

all_LR = []

for i in range(0,12):
    print "Processing %d" % i

    hrtf_file = hrtf_path + "/%02d.wav" % (i+1)
    shep_file = shepard_path + "/shepard_%02d.WAV" % i

    L, R = import_WAV( hrtf_file )
    shep = import_WAV( shep_file )

    out_L = np.convolve(shep,L)
    out_R = np.convolve(shep,R)

    #out_LR = np.array( out_L, out_R )
    out_LR = (list(out_L), list(out_R))
    all_LR.append(out_LR)
    #np.append( all_LR, out_LR )

np_array = np.array(all_LR)

amp_max = np.amax( np.fabs(np_array) )
print( "AmpMAX: %f" % amp_max )

np_array /= amp_max

for i in range(0,12):
    out_file = out3d_path + "/s3D_%02d.WAV" % i
    print out_file

    L,R = np_array[i]

    export_WAV( out_file, L, R )

Tags: 代码infornprangealloutarray
1条回答
网友
1楼 · 发布于 2024-09-30 01:20:24

如果可以将数据转换为numpy.arrays,那么可以使用^{}和{a2},如下所示。在

import numpy as np

a = np.array([(1, 2), (-3, 4), (-2, 2), (0, 1), (1, 3)])

a_abs = np.fabs(a)
print(a_abs)
# [[ 1.  2.]
#  [ 3.  4.]
#  [ 2.  2.]
#  [ 0.  1.]
#  [ 1.  3.]]

a_max = np.amax(a_abs)

print(a_max)
# 4.0

np.fabs只返回一个形状相同但多维数组中每个元素的绝对值的数组。在

np.amax将返回数组的最大值。如果使用关键字参数选择一个axis(例如np.amax(a, axis=0)),那么它将按照axis来操作。但是,axis关键字的默认值是None,这将导致它沿着平坦数组操作。在

相关问题 更多 >

    热门问题