- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个问题,我试图用 Mathematica 解决。我有一个列表,其中包含位置测量的 x 和 y 坐标(以及在每个点测量的数量的 z 值)。所以,我的 list 开始于列表={{-762.369,109.998,0.915951},{-772.412,109.993,0.923894},{-777.39, 109.998, 0.918108},...} (x,y,z)。由于某些原因,我必须将所有这些 x、y 和 z 值填充到一个矩阵中。如果我对每个 y 坐标有相同数量的 x 坐标(比如 80),那将很容易,然后我可以使用 Partition[list,80] 生成一个有 80 列的矩阵(和一些行,其编号是给定的)通过具有相同值的 y 坐标的数量)。
不幸的是,这并不是那么容易,每个 y 的 x 坐标的数量并不是严格恒定的,从附带的 ListPlot 可以看出。 谁能给我一些建议,如何将此图的每个点/列表的每个 x-y-(和 z-)坐标填充到矩阵中?
为了更好地解释我想要什么,我在附图中指出了一个矩阵。人们可以看到,几乎我的情节的每个点都会落入矩阵的一个单元格中,只有一些单元格会留空。我在图中使用红色表示列表中 x 坐标上升的点,蓝色表示列表中 x 坐标下降的点(位置是沿着曲折线测量的)。也许这种顺序对解决问题很有用...... Here指向我的坐标的链接,也许这有帮助。
好吧,我希望我对我的问题的解释足够好。我将不胜感激!
最佳答案
这个解决方案背后的基本思想是:
(OP 通过电子邮件将数据文件发送给我。它由 {x,y}
点坐标组成。)
读入数据:
data = Import["xy.txt", "Table"];
找到离每个点最近的 4 个点,并注意它们在水平和垂直方向上的距离大约为 5:
nf = Nearest[data];
In:= # - data[[100]] & /@ nf[data[[100]], 5]
Out= {{0., 0.}, {-4.995, 0.}, {5.003, 0.001}, {-0.021, 5.003}, {0.204, -4.999}}
ListPlot[nf[data[[100]], 5], PlotStyle -> Red,
PlotMarkers -> Automatic, AspectRatio -> Automatic]
生成接近点之间的差异向量,并只保留那些长度约为 5 的向量:
vv = Select[
Join @@ Table[(# - data[[k]] & /@ nf[data[[k]], 5]), {k, 1, Length[data]}],
4.9 < Norm[#] < 5.1 &
];
按向量可以指向的方向对向量进行平均,并保留两个“好的”向量(指向“向上”或“向右”)。
In:= Mean /@ GatherBy[vv, Round[ArcTan @@ #, 0.25] &]
Out= {{0.0701994, -4.99814}, {-5.00094, 0.000923234}, {5.00061, -4.51807*10^-6},
{-4.99907, -0.004153}, {-0.0667469, 4.9983}, {-0.29147, 4.98216}}
In:= {u1, u2} = %[[{3, 5}]]
Out= {{5.00061, -4.51807*10^-6}, {-0.0667469, 4.9983}}
使用一个随机点作为原点,因此沿基向量 u1
和 u2
的坐标将为整数:
translatedData = data[[100]] - # & /@ data;
让我们找到整数坐标,看看它们有多好(它们与实际整数有多远):
In:= integerIndices = LinearSolve[Transpose[{u1, u2}], #] & /@ translatedData ;
In:= Max[Abs[integerIndices - Round[integerIndices]]]
Out= 0.104237
In:= ListPlot[{integerIndices, Round[integerIndices]}, PlotStyle -> {Black, Red}]
所有点都靠近整数近似值。
偏移整数坐标,使它们都是正数,可以用作矩阵索引,然后将元素聚集到矩阵中。我将坐标放在 point
对象中,以免混淆 SparseArray
:
offset = Min /@ Transpose[Round[integerIndices]]
offset = {1, 1} - offset
result =
SparseArray[
Thread[(# + offset & /@ Round[integerIndices]) -> point @@@ data]]
result = Normal[result] /. {point -> List, 0 -> Null}
我们终于有了一个矩阵result
,其中每个元素都是一个坐标对! (我在这里草率地做了 0 -> Null
来标记缺失的元素:重要的是 data
不包含确切的 0
。)
MatrixForm[result[[1 ;; 10, 1 ;; 5]]]
编辑
为了好玩,让我们看看点与精确整数格点的偏差:
lattice = #1 u1 + #2 u2 & @@@ Round[integerIndices];
delta = translatedData - lattice;
delta = # - Mean[delta] & /@ delta;
ListVectorPlot[Transpose[{lattice, delta}, {2, 1, 3}], VectorPoints -> 30]
关于wolfram-mathematica - 使用 Mathematica 从列表中创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832482/
我记得 WRI 的某个人在 official newsgroup 中说出于兼容性目的,Mathematica 7 仍然有一个来自 Mathematica 5 的老式 Mathematica 帮助浏览器
除非巫师先生在度假,否则很难击败这种似乎具有无所不在和无所不知的现象。我们如何使用 Mathematica 和 StackOverflow API 超越他? 最佳答案 这是 Sjoerd 解决方案的一
您好,我无法理解以下函数的输出。 ListPointPlot3D[Table[Sin[x^2 + y], {x, 0, 3, 0.15}, {y, 0, 3
我在图形中显示了一组点: alt text http://img69.imageshack.us/img69/874/plc1k1lrqynuyshgrdegvfy.jpg 我想知道是否有任何命令可以
让 S是具有唯一元素的向量,并且 s它的一个子集,也有独特的元素;例如,S={1,2,3,4,5,6}和 s={1,3,4,6} .现在给出另一个向量 c={7,8,9,7} ,如何创建矢量 C=[7
我想知道如果给定多个替换规则,mma 如何确定在发生碰撞时首先应用哪个规则。一个例子是: x^3 + x^2*s + x^3*s^2 + s x /. {x -> 0, x^_?OddQ -> 2}
在mathematica 中(我使用的是 mma 5.0(猜猜很老)),如果我将以下内容作为一行输入: Needs["Graphics`Master`"]; Animate[Plot[Sin[n x]
如果我有一个字母表,假设 sigma = {1,2,3,4,a,b,c,d,e,f,g} 并且想要生成所有长度为 n 的单词,有没有办法做到这一点? 我可以做 Flatten[Outer[Functi
生成参数列表的素数列表的最简单函数是什么?想出这样的函数并不难,比如: foo[n_] := Block[{A = {}, p = 2}, While[p All] 关于wol
在此示例中,将函数定义为“functionB”时,这是一个奇怪的结果。有人可以解释吗?我想绘制functionB[x]和functionB[Sqrt[x]],它们必须不同,但是此代码显示functio
如何在 Mathematica 中对列表进行数值微分而不先将其拟合为数学表达式(即使用 FindFit )? 具体来说,我想在列表中找到最大斜率的点。 我已经考虑使用 Differences并找到最大
我正在寻找 Mathematica 中原子对象的完整列表(其中 AtomQ 产生 True)。 我知道 Symbol String Integer Real Rational Complex Spar
最近发现了一些old post在 MathGroup 上使用未记录的命令行选项 -batchinput和 -batchoutput显示: If test.mma contains the follo
Mathematica 似乎缺少此功能,或者无论如何我都找不到它。 Series function 可以对多个变量进行连续扩展,但它似乎无法进行完整的多元扩展。 有谁知道如何做到这一点? 谢谢 最佳答
我有兴趣运行相同的函数,该函数以并行方式在多核上使用不同的参数值进行一些蒙特卡罗评估。我还想确保整个函数在同一个内核上运行,而函数内的计算不会跨内核分布。例如,假设我有一个函数(故意简化) f[a_,
我怎样才能从 Range[96] 中不重复地获得 48 个随机对的两个不同元素?即 96 个元素只使用一次。 当我尝试将元组/子集与 Select 结合使用时,我觉得必须有一种更直接的方法来实现这一点
我正在评估 Wolfram Mathematica 8 的大学类(class)项目。 我很难定义目标编程模型。 首先是因为我在数学方面真的很匮乏 :) 其次,因为我在 official documen
我开发了一些代码来从 LogNormalDistribution 和 StableDistribution 的乘积生成随机变量: LNStableRV[{\[Alpha]_, \[Beta]_, \[
我有一个想要优化的字符串验证函数。该字符串的长度为 2n,由 0 和 1 组成,例如 str="100001"。我想测试一下: 1) 字符串中奇数索引位置的 1 的数量(必须不少于 1)是否等于偶数索
请考虑: Function[subID, pointSO[subID] = RandomInteger[{1, 4}, {5, 2}]] /@ {"subA", "subB"}; M
我是一名优秀的程序员,十分优秀!