Wolfram mathematica 如何应用涉及表列中元素的函数

Wolfram mathematica 如何应用涉及表列中元素的函数,wolfram-mathematica,dft,Wolfram Mathematica,Dft,我有一个nxm数据矩阵 如何创建一个包含每列元素的和的函数,这样如果我输入一个值,就会得到一个1 x m行(其中m>100) 更具体地说,我正在计算每列数据的离散傅里叶变换,该变换适用于我输入的任何输入频率 以下是我的单列代码: (* Length of time data *) n = Length[t] (* Compute discrete fourier transform at specified frequency f *) DFT[f_] := (t[[2]] - t[[1]])

我有一个
nxm
数据矩阵

如何创建一个包含每列元素的和的函数,这样如果我输入一个值,就会得到一个
1 x m
行(其中
m>100

更具体地说,我正在计算每列数据的离散傅里叶变换,该变换适用于我输入的任何输入频率

以下是我的单列代码:

(* Length of time data *)
n = Length[t]

(* Compute discrete fourier transform at specified frequency f *)
DFT[f_] := (t[[2]] - t[[1]]) Sum[
    mat[[i + 1]] * Exp[2 Pi I f mat[[i + 1]]], {i, 0, n - 1}];
我想把它扩展到m列,这样如果我想以特定的频率计算给定列的
DFT
,我可以只提取
1 x m
行的一个元素


我考虑过一个函数,比如
Map
,但它似乎会通过输入行中每个元素的值来直接应用我的函数,而这正是我想要的。

我猜你的意思是只想将函数映射到列上

mat = RandomInteger[{0, 10}, {5, 6}];
map[f_, mat_?(MatrixQ[#] &), c_Integer /; c > 0] := f /@ mat[[All, c]]


我猜您的意思是只想在列上映射函数

mat = RandomInteger[{0, 10}, {5, 6}];
map[f_, mat_?(MatrixQ[#] &), c_Integer /; c > 0] := f /@ mat[[All, c]]


似乎您只需要获取专栏。矩阵在Mathematica中的存储方式是第一个坐标作为行,第二个坐标作为列。所有坐标都从1开始,而不是从0开始。要获取特定坐标处的元素,请使用
矩阵[[row,column]]
。如果需要整行,
矩阵[[row]]
。如果需要列,
matrix[[All,column]]
。因此,这里有一种方法可以调整
DFT
函数:

DFT[f_, list_] := (t[[2]] - t[[1]]) Sum[
    list[[i]] * Exp[2 Pi I f list[[i]]], {i, 1, n}];

yourColumnDFT = DFT[f, matrix[[All, columnNumber]]]
事实上,您可以通过删除对
Sum
的调用来简化此操作,因为这些操作会按索引自动映射列表:

DFT[f_, list_] := (t[[2]] - t[[1]]) Total[list Exp[2 Pi I f list]]

顺便说一下,这有一个内置函数,
Fourier
(),它给出的DFT与您的稍有不同,但也很有用。我建议以后为这些任务寻找内置函数,因为Mathematica有一系列这样的功能,可以为您节省很多麻烦。

似乎您只需要获得该专栏。矩阵在Mathematica中的存储方式是第一个坐标作为行,第二个坐标作为列。所有坐标都从1开始,而不是从0开始。要获取特定坐标处的元素,请使用
矩阵[[row,column]]
。如果需要整行,
矩阵[[row]]
。如果需要列,
matrix[[All,column]]
。因此,这里有一种方法可以调整
DFT
函数:

DFT[f_, list_] := (t[[2]] - t[[1]]) Sum[
    list[[i]] * Exp[2 Pi I f list[[i]]], {i, 1, n}];

yourColumnDFT = DFT[f, matrix[[All, columnNumber]]]
事实上,您可以通过删除对
Sum
的调用来简化此操作,因为这些操作会按索引自动映射列表:

DFT[f_, list_] := (t[[2]] - t[[1]]) Total[list Exp[2 Pi I f list]]
顺便说一下,这有一个内置函数,
Fourier
(),它给出的DFT与您的稍有不同,但也很有用。我建议以后为这些任务寻找内置函数,因为Mathematica有很多类似的功能,可以为您节省很多麻烦