我试图推广一些Python代码来对任意维度的数组进行操作。这些操作应用于数组中的每个向量。因此,对于一维数组,只需一次操作,对于一个二维数组,它将是行列式(线性,因此顺序无关紧要)。例如,一维数组(a)很简单:对'N'维numpy数组的操作
b = operation(a)
其中'操作'期待1D数组。对于一个二维数组,该操作可能继续作为
for ii in range(0,a.shape[0]):
b[ii,:] = operation(a[ii,:])
for jj in range(0,b.shape[1]):
c[:,ii] = operation(b[:,ii])
我想提出这个一般,我并不需要知道数组的维事前,而不是有一大套的,如果/ elif的语句每个可能的维度。 通常用于1或2维度的解决方案都可以,但一个完全一般的解决方案将是首选。在现实中,我不认为需要这样的维度高于2,但如果我能看到一个通用的例子,我会学到一些东西!
其他信息: 我有一个使用单元格做类似的matlab代码,但我不完全理解它是如何工作的。在这个例子中,每个向量被重新排列(基本上与numpy.fft中的fftshift功能相同)。不知道这是否有帮助,但是它可以在任意维度的数组上运行。
function aout=foldfft(ain)
nd = ndims(ain);
for k = 1:nd
nx = size(ain,k);
kx = floor(nx/2);
idx{k} = [kx:nx 1:kx-1];
end
aout = ain(idx{:});
您可以详细介绍一下'操作'的含义吗?它是某种复杂的函数还是算术运算? – Daniel
我不得不运行MATLAB的各个部分,但我认为它构造了一个大小为'nd'的单元数组,每个维都有一个索引范围/切片。像'apply_along/over_axis'这样的'numpy'函数做类似的事情,除了必须创建一个'tuple'。 – hpaulj
@Ophion它只是一个将单个向量(1D数组)作为输入的函数。所以它更像是一个复杂的函数,而不是一个简单的算术运算。 –