Mathematica:如何将函数应用于表的某一列

发布于 2024-10-09 17:21:06 字数 176 浏览 2 评论 0原文

我想将函数应用于表的特定列。假设 (mxn) 表的第 i 列。实际上我只想将该列中的所有元素与标量相乘,但应用通用函数也可以。

它可能只需要一些 Map 或 MapAt 命令,可能与 Transpose 结合使用,以便应用于行而不是列 - 但我无法找出寻址整个列(或行)的正确语法。

任何提示都是高度赞赏。

I would like to apply a function to a specific column of a table. Say to the i-th column of a (m x n) table. Actually I just want to multiply all elements in that column with a scalar, but the application of a general function would be fine as well.

It probably just needs some Map or MapAt command, maybe combined with a Transpose in order to apply to rows instead of columns - but I can't figure out the correct syntax for addressing an entire column (or row)..

Any hints would be highly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

千と千尋 2024-10-16 17:21:06

这是一个 3x3 的表格:

In[1]:= table = {{1,2,3}, {4,5,6}, {7,8,9}}
Out[1]= {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
In[2]:= table//TableForm
Out[2]//TableForm= 1   2   3
                   4   5   6
                   7   8   9

Column 2 is table[[All, 2]]:

In[3]:= table[[All, 2]]
Out[3]= {2, 5, 8}

因此,仅修改该列很简单:

In[4]:= table[[All, 2]] = 10 * table[[All, 2]]
Out[4]= {20, 50, 80}
In[5]:= table//TableForm
Out[5]//TableForm= 1   20   3
                   4   50   6
                   7   80   9

Here's a 3x3 table:

In[1]:= table = {{1,2,3}, {4,5,6}, {7,8,9}}
Out[1]= {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
In[2]:= table//TableForm
Out[2]//TableForm= 1   2   3
                   4   5   6
                   7   8   9


Column 2 is table[[All, 2]]:

In[3]:= table[[All, 2]]
Out[3]= {2, 5, 8}

So it's a simple matter to modify only that column:

In[4]:= table[[All, 2]] = 10 * table[[All, 2]]
Out[4]= {20, 50, 80}
In[5]:= table//TableForm
Out[5]//TableForm= 1   20   3
                   4   50   6
                   7   80   9

腹黑女流氓 2024-10-16 17:21:06

例如,

ranfunc=Function[{f,mat, n},Transpose[MapAt[f /@ # &, Transpose[mat], n]]]

将 f 应用于 mat 第 n 列的每个元素。因此,例如,

ranfunc[Sin[Cos[#]] &, {{1, 2, 3}, {a, b, c}, {\[Alpha], \[Beta], \[Gamma]}}, 2]

将应用 Sin[Cos[#]]&到第二列的每个元素, while

ranfunc[s*# &, {{1, 2, 3}, {a, b, c}, {\[Alpha], \[Beta], \[Gamma]}},2]

会将第二列的每个元素乘以 s

For example,

ranfunc=Function[{f,mat, n},Transpose[MapAt[f /@ # &, Transpose[mat], n]]]

will apply f to each element of the nth column of mat. So, for instance,

ranfunc[Sin[Cos[#]] &, {{1, 2, 3}, {a, b, c}, {\[Alpha], \[Beta], \[Gamma]}}, 2]

will apply Sin[Cos[#]]& to each element of the second column, while

ranfunc[s*# &, {{1, 2, 3}, {a, b, c}, {\[Alpha], \[Beta], \[Gamma]}},2]

will multiply each element on the second column by s

冬天旳寂寞 2024-10-16 17:21:06

一种通用方法是使用 ReplacePart

例如,将 f 应用于 mat 的第 3 列:

(mat = Array[Subscript[a, ##] &, {4, 4}]) // MatrixForm

(newmat = ReplacePart[#, 3 -> f  @#[[3]] ] & /@ mat) // MatrixForm

以下将每个条目乘以 10:

(newmat2 = ReplacePart[#, 3 -> 10 #[[3]] ] & /@ mat) // MatrixForm

然而,一种“快速”方法如下:(

mat[[All, 3 ]] *= 10

与第一种方法不同,中的所有条目mat 的第 3 列现在已修改,目前尚不清楚您是要修改现有表,还是要创建一个经过修改的新表,而保持原始表不变)

One versatile approach is to use ReplacePart

For example, to apply f to column 3 of mat:

(mat = Array[Subscript[a, ##] &, {4, 4}]) // MatrixForm

(newmat = ReplacePart[#, 3 -> f  @#[[3]] ] & /@ mat) // MatrixForm

The following multiplies each entry by 10:

(newmat2 = ReplacePart[#, 3 -> 10 #[[3]] ] & /@ mat) // MatrixForm

However, a 'quick' way to do this it as follows:

mat[[All, 3 ]] *= 10

(Unlike the first method, all entries in column 3 of mat are now modified. It is not clear whether you want to modify the existing table, or to create a new table with modifications, leaving the original intact)

堇色安年 2024-10-16 17:21:06

MapAt 函数接受以下部分规范:

MapAt[f, mat, {All, 3}]

将“f”应用于矩阵的第 3 列。

MapAt function accepts the following Part specification:

MapAt[f, mat, {All, 3}]

to apply 'f' to column 3 of your matrix.

琴流音 2024-10-16 17:21:06

我发现的另一个紧凑的解决方案是使用 Map 和 MapAt:

这是一个示例矩阵:

mat={{3,4,5},{4,7,5},{2,6,7},{3,6,9}}

现在将函数 f 应用于第二列:

n=2;
Map[MapAt[f,#,n]&,mat]

结果是:

{{3,f[4],5},{4,f[7],5},{2,f[6],7},{3,f[6],9}}

Another compact solution I found is using Map and MapAt:

Here is an example Matrix:

mat={{3,4,5},{4,7,5},{2,6,7},{3,6,9}}

Now apply the function f to the second column:

n=2;
Map[MapAt[f,#,n]&,mat]

The result is then:

{{3,f[4],5},{4,f[7],5},{2,f[6],7},{3,f[6],9}}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文