Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 点列表上的函数映射_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica 点列表上的函数映射

Wolfram mathematica 点列表上的函数映射,wolfram-mathematica,Wolfram Mathematica,我有一份要点清单: points = {{0.144, 1.20}, {0.110, 1.60}, {0.083, 2.00}, {0.070, 2.40}, {0.060, 2.80}, {0.053, 3.20}, {0.050, 3.60}, {0.043, 4.00}} 我想将每个点传递到此函数,并返回一个新点: coordinate[length_,frequence_] = {(1/(2*length)) , (frequence*1000)} 这将产生如下列表

我有一份要点清单:

points = {{0.144, 1.20}, {0.110, 1.60}, {0.083, 2.00}, {0.070, 2.40},
         {0.060, 2.80}, {0.053, 3.20}, {0.050, 3.60}, {0.043, 4.00}}
我想将每个点传递到此函数,并返回一个新点:

coordinate[length_,frequence_] = {(1/(2*length)) , (frequence*1000)}
这将产生如下列表:

 { {3.47, 12 000}, {4.54, 16 000}, ... }
我一直在尝试使用map:

 data = Map[coordinate, points]
它产生如下结果:

 {coordinate[{0.144, 1.2}], coordinate[{0.11, 1.6}]}

起初,这似乎是正确的,只是它传递了一个列表,而不仅仅是参数。但是,即使我将我的
坐标
函数更改为接受列表(通过将预期参数更改为
列表
并将
长度
更改为
列表[[1]]
频率
更改为
列表[[2]
),我将无法使用该映射返回的列表,例如,通过
LinearModelFit[data,x,x][“BestFit”]
将您的定义更改为

coordinate[point_] := {(1/(2*point[[1]])) , (point[[2]]*1000)}

将您的定义更改为

coordinate[point_] := {(1/(2*point[[1]])) , (point[[2]]*1000)}

旁注:我个人会远离其他答案中提出的
@@@
,因为作为一名程序员,我觉得这很尴尬。但这些答案当然也是正确的


旁注:我个人会远离其他答案中提出的
@@@
,因为作为一名程序员,我觉得这很尴尬。但是这些答案当然也是有效的。

或者,您可以使用
Apply
而不是
Map

coordinate @@@ points
输出:

{{3.47222, 1200.}, {4.54545, 1600.}, {6.0241, 2000.}, {7.14286, 2400.}, 
 {8.33333, 2800.}, {9.43396, 3200.}, {10., 3600.}, {11.6279, 4000.}}

或者,您可以使用
Apply
而不是
Map

coordinate @@@ points
输出:

{{3.47222, 1200.}, {4.54545, 1600.}, {6.0241, 2000.}, {7.14286, 2400.}, 
 {8.33333, 2800.}, {9.43396, 3200.}, {10., 3600.}, {11.6279, 4000.}}

使用您的定义的最简单方法是在级别1上应用
,该级别的缩写为
@@@@code>。(请参阅的更多信息部分。)那么,您想要

points = {{0.144, 1.20}, {0.110, 1.60}, {0.083, 2.00}, {0.070, 
   2.40}, {0.060, 2.80}, {0.053, 3.20}, {0.050, 3.60}, {0.043, 4.00}}

coordinate[length_, frequence_] := {(1/(2*length)), (frequence*1000)}

coordinate @@@ points
请注意,我已将您的定义更改为
SetDelayed
,而不仅仅是
Set
(请注意右侧显示本地化变量的语法突出显示)。请参阅指南页

这就是说,最好让
坐标
采用列表而不是顺序,就像belisarius和ninjagecko的答案那样,即

coordinate[{length_, frequence_}] := {(1/(2*length)), (frequence*1000)}

使用您的定义的最简单方法是在级别1上应用
,该级别的缩写为
@@@@code>。(请参阅的更多信息部分。)那么,您想要

points = {{0.144, 1.20}, {0.110, 1.60}, {0.083, 2.00}, {0.070, 
   2.40}, {0.060, 2.80}, {0.053, 3.20}, {0.050, 3.60}, {0.043, 4.00}}

coordinate[length_, frequence_] := {(1/(2*length)), (frequence*1000)}

coordinate @@@ points
请注意,我已将您的定义更改为
SetDelayed
,而不仅仅是
Set
(请注意右侧显示本地化变量的语法突出显示)。请参阅指南页

这就是说,最好让
坐标
采用列表而不是顺序,就像belisarius和ninjagecko的答案那样,即

coordinate[{length_, frequence_}] := {(1/(2*length)), (frequence*1000)}

我觉得
@@@
是处理这个问题最干净的方法。但是,如果您可以重新定义<代码>坐标< /代码>,但不想删除其现有语法,可以考虑这个构造。

Clear[coordinate]
coordinate[length_, frequence_] := {(2 length)^-1, 1000 frequence}
coordinate[l_List] := Apply[coordinate, l, {-2}]
新行添加了处理列表的定义。这假设您的参数本身不是具有深度的对象。它为您使用该功能提供了相当大的灵活性:

coordinate[0.144, 1.20]

(*Out= {3.47222, 1200.} *)

coordinate[{0.144, 1.20}]

(*Out= {3.47222, 1200.} *)

coordinate[points]

(*Out= {{3.47222, 1200.}, {4.54545, 1600.}, {6.0241, 
  2000.}, {7.14286, 2400.}, {8.33333, 2800.}, {9.43396, 3200.}, {10., 
  3600.}, {11.6279, 4000.}} *)

coordinate /@ points

(*Out= {{3.47222, 1200.}, {4.54545, 1600.}, {6.0241, 
  2000.}, {7.14286, 2400.}, {8.33333, 2800.}, {9.43396, 3200.}, {10., 
  3600.}, {11.6279, 4000.}} *)

coordinate @@@ points

(*Out= {{3.47222, 1200.}, {4.54545, 1600.}, {6.0241, 
  2000.}, {7.14286, 2400.}, {8.33333, 2800.}, {9.43396, 3200.}, {10., 
  3600.}, {11.6279, 4000.}} *)

我觉得
@@@
是处理这个问题最干净的方法。但是,如果您可以重新定义<代码>坐标< /代码>,但不想删除其现有语法,可以考虑这个构造。

Clear[coordinate]
coordinate[length_, frequence_] := {(2 length)^-1, 1000 frequence}
coordinate[l_List] := Apply[coordinate, l, {-2}]
新行添加了处理列表的定义。这假设您的参数本身不是具有深度的对象。它为您使用该功能提供了相当大的灵活性:

coordinate[0.144, 1.20]

(*Out= {3.47222, 1200.} *)

coordinate[{0.144, 1.20}]

(*Out= {3.47222, 1200.} *)

coordinate[points]

(*Out= {{3.47222, 1200.}, {4.54545, 1600.}, {6.0241, 
  2000.}, {7.14286, 2400.}, {8.33333, 2800.}, {9.43396, 3200.}, {10., 
  3600.}, {11.6279, 4000.}} *)

coordinate /@ points

(*Out= {{3.47222, 1200.}, {4.54545, 1600.}, {6.0241, 
  2000.}, {7.14286, 2400.}, {8.33333, 2800.}, {9.43396, 3200.}, {10., 
  3600.}, {11.6279, 4000.}} *)

coordinate @@@ points

(*Out= {{3.47222, 1200.}, {4.54545, 1600.}, {6.0241, 
  2000.}, {7.14286, 2400.}, {8.33333, 2800.}, {9.43396, 3200.}, {10., 
  3600.}, {11.6279, 4000.}} *)

为了记录在案,英语中的单词是
frequency
frequency
在技术上是可以接受的,但我认为从来没有在唱片上使用过,在英语中,单词是
frequency
<代码>频率
在技术上是可以接受的,但我认为从来没有使用过doops,我输入了一个错别字,没有做过
:=
。这就是你想要的,因为
[
..
]
里面的任何东西都可以是一个模式,例如
坐标[pattern]
。哎呀,我打错了,没有做
:=
。这就是你想要的,因为
[
..
]
里面的任何东西都可以是一种模式,例如
坐标[pattern]
。我个人更喜欢
应用[…,1]
方法——我认为它使代码更容易读/写。(出于某种原因,我不喜欢使用
零件
,除非我绝对必须……@Brett我同意你对美学的看法,但有时出于性能考虑,我会选择基于
零件
。对于大型列表,使用
Apply
通常会阻止自动编译。如果我们用模式定义
coordinate
,这并不重要,但是如果我们使用纯函数,比如
coordinate={{2,{2*1000}&
for
Apply[…,1]
coordinatePart={[1]/2,{[2]]*1000}&
for
Map
。使用测试样本,如
pointsFreqs=RandomReal[{1,10},{100000,2}]Map
Apply
具有显著的性能优势@Brett:我同意,使用
Part
看起来很难看,使代码更难阅读:“变量
列表[[2]]
指的是什么?”。(编辑:虽然Leonid确实提出了一个很好的观点!)感谢您对Apply/Map和Set/SetDelayed参考的详细回答。就个人而言,我更喜欢
Apply[…,1]
方法——我认为它使代码更易于阅读/编写。(出于某种原因,我不喜欢使用
零件
,除非我绝对必须……@Brett我同意你对美学的看法,但有时出于性能考虑,我会选择基于
零件
。对于大型列表,使用
Apply
通常会阻止自动编译。如果我们用模式定义
coordinate
,这并不重要,但是如果我们使用纯函数,比如
coordinate={{2,{2*1000}&
for
Apply[…,1]
coordinatePart={[1]/2,{[2]]*1000}&
for
Map
。使用测试