vector 相关问题

向量是一维数组:它包含可以使用整数索引访问的组件。在某些语言中,矢量的大小可以根据需要增大或缩小,以适应在创建Vector之后添加和删除项目。使用'vector-graphics'进行图形显示。

在 RUST 中实现自定义结构向量的过滤器

我是 Rust 新手,就像昨天刚开始的一样,我正在创建一个待办事项/日历应用程序来学习。我正处于通过结构和实现进行定义的最初阶段。我一直致力于创造一个有趣的...

回答 1 投票 0

spark 数据帧中两列中两个向量之间的欧几里德距离

我正在尝试获取 Spark 数据框中不同列中两个向量之间的欧氏距离。我需要在 Spark 上完成此操作。我花了很多时间尝试做到这一点,但无法想象......

回答 1 投票 0

如何将一个Vec的值引用到另一个Vec?

我只是想做这样的事情: fn 主() { 设 mut 点: Vec<(&str, &str)> = Vec::new(); 让现有的: Vec<(String, String)> = Vec::new(); 对于 t 中

回答 1 投票 0

使用 gnuplot,如何将向量(即 1xN 或 Nx1 矩阵)绘制为图像?

如何将向量(即 1xN 或 Nx1 矩阵)绘制为图像? 我绘制 2x2 矩阵没有问题,如下所示: 用图像绘制“-”矩阵 1 2 3 4 e 但是,以下两个示例 2x1 和 ...

回答 1 投票 0

std::vector::data 有什么好的应用?

所以我和我的朋友有一天在查看 std::vector 类时注意到,您可以使用函数 std::vector::data 来检索指向 c++11 中内部数组的指针。直觉上...

回答 3 投票 0

OpenLayers:缩放级别裁剪 VectorTile 图层 - 如何修复?

我想使用 TopoJSON 数据作为 OpenLayers 地图的 VectorTile 图层。当地图的缩放级别设置为 3 或更低时,将显示完整的 VectorTile 图层,但在缩放级别为 4 或更高时,

回答 1 投票 0

如何在 R 中使用 Rcpparmadillo 传入行向量?

我正在使用 Rcpp for R 编写一个函数,我想在其中执行向量叉积。所以在 R 中我正在表演 t(v)%*%v 所以我编写了以下 Rcpp 函数来执行此操作 武装代码 <- &...

回答 1 投票 0

当我调用Integrate(向量表达式,t)时Python抛出错误

我编写了一个Python程序来根据给定的时变电场计算磁场。我使用 sympy.vector 中的 CoordSys3d 我今天下午就开始工作了它给出了正确的答案...

回答 2 投票 0

使用 R Haven 包读取数据时,为什么 df$VARNAME 与 df[,i] 不一样?

上下文:我已经使用haven包读取了PISA 2022数据,现在我想创建一个由三列组成的辅助df: 变量名称(例如 EFFORT1) 变量标签(例如多少有效...

回答 2 投票 0

如何将迭代器传递给目标元素的 lambda 函数?

我想在向量中找到一个元素假设: 向量:向量输入 = {11, 12, 15, 11, 13}; 目标元素:11; 我的代码: auto mylambda = [&target](const int &a) { 返回 a == ta...

回答 1 投票 0

对于变量的每个值,仅选择包含列表中所有值的值。 R

我有一个包含许多列的大型数据集,包括周数(即1、2、3)和工作日(“星期一”、“星期二”等)。有些周可能只有一两个工作日的数据。我...

回答 1 投票 0

R 将包含向量的列拆分为多列

我已经研究了一段时间,但还没有找到这个问题的方便答案,所以我提出了新问题,尽管它看起来很简单。 我有一个专栏(通过使用

回答 1 投票 0

c++中使用vector和使用new、delete有什么区别?

我想问一下C++中使用vector和使用new、delete的区别。 new、delete和malloc、free都用于动态内存分配。 那么我们为什么不直接使用向量呢,

回答 2 投票 0

push_back() 函数在具有结构数据类型的向量上出错?

在c++中为顶点缓冲区布局编写头文件。 #pragma 一次 #包括 #包括 结构体vertexBufferElement { 无符号整型; 无符号整数计数;

回答 1 投票 0

尝试将指针分配给结构成员时,结构的奇怪 std::vector 行为

我只是不知道如何更好地描述这个问题。我有以下代码(我使用命名空间 std 编写来简化它): #包括 #包括 使用命名空间 std;

回答 1 投票 0

std::unordered_set 与 constexpr std::vector 用于存储不可变数据

不幸的是,即使 C++23 也没有 constexpr 集:( 我希望存储适量(可能~100)的字符串,代表系统中存在的不同配置。我只需要

回答 1 投票 0

如何在矢量数据的情况下应用FFT?

我编写了以下类来计算 3d 向量列表的自相关。 我从这个链接中获取了公式 公共静态类 AutocorrVec3 { 私有静态双 C(int t, List 我编写了以下类来计算 3d 向量列表的自相关。 我从这个链接获取了公式 public static class AutocorrVec3 { private static double C(int t, List<Vec3> vectors) { int n = vectors.Count; if (t >= n || t < 0) throw new ArgumentException("Invalid value for t. It must be between 0 and n-1."); double sum = 0; for (int i = 0; i < n - t; i++) { sum += vectors[i].Dot(vectors[i + t]); } return sum / (n - t); } public static (List<double> taus, List<double> autocorrs) GetAutoCorrelationPoints(List<Vec3> vectors, int maxLag) { var tValues = new List<double>(); var cResults = new List<double>(); double c0 = C(0, vectors); // This is the normalization factor Console.WriteLine($"Normalization factor: {c0}"); for (int lag = 0; lag <= maxLag; lag++) // Start from 0 to include the autocorrelation at lag 0 { try { double cValue = C(lag, vectors); Console.WriteLine($"Lag={lag}, Raw Autocorr={cValue}, Normalized Autocorr={cValue / c0}"); tValues.Add(lag); cResults.Add(cValue / c0); // Normalization is done here } catch (ArgumentException ex) { Console.WriteLine(ex.Message); break; } } return (tValues, cResults); } } 问题是,GetAutoCorrelationPoints()非常慢。例如,我需要转换 24 个文件,每个文件包含 10000000 个 3d 矢量。 24小时后,连一个数据文件都无法完成计算。 在这种情况下我该如何应用FFT? 我想用MathNet.Numerics。 using System; using System.Collections.Generic; using System.Numerics; using MathNet.Numerics.IntegralTransforms; namespace FourierTransformCSharp { public static class AutocorrVec3 { // Compute the autocorrelation of a time series using FFT public static double[] ComputeAutocorrelationUsingFFT(List<Vec3> vectors) { int n = vectors.Count; // Create a zero-padded list double the size of the original for FFT var paddedVectors = new Complex[2 * n]; for (int i = 0; i < n; i++) { // Convert vector to complex number with magnitude as real part paddedVectors[i] = new Complex(vectors[i].Magnitude(), 0); } for (int i = n; i < 2 * n; i++) // Zero padding { paddedVectors[i] = Complex.Zero; } // Perform FFT on the zero-padded list Fourier.Forward(paddedVectors, FourierOptions.Default); // Compute power spectrum (magnitude squared) for (int i = 0; i < paddedVectors.Length; i++) { var magnitude = paddedVectors[i].Magnitude; paddedVectors[i] = new Complex(magnitude * magnitude, 0); } // Perform Inverse FFT to obtain the autocorrelation function Fourier.Inverse(paddedVectors, FourierOptions.Default); // Extract the real parts as the autocorrelation result var autocorr = new double[n]; for (int i = 0; i < n; i++) { autocorr[i] = paddedVectors[i].Real; } // Normalize the autocorrelation result var normalizationFactor = autocorr[0]; for (int i = 0; i < n; i++) { autocorr[i] /= normalizationFactor; } return autocorr; } // Calculate autocorrelation of vector time series at lag t public static double C(int t, List<Vec3> vectors) { double[] autocorr = ComputeAutocorrelationUsingFFT(vectors); return autocorr[t]; } // Get autocorrelation values for lags from 0 to maxLag public static (List<int> taus, List<double> autocorrs) GetAutoCorrelationPoints(List<Vec3> vectors, int maxLag) { List<int> taus = new List<int>(); List<double> autocorrs = new List<double>(); double[] autocorr = ComputeAutocorrelationUsingFFT(vectors); for (int t = 0; t <= maxLag && t < vectors.Count; t++) { taus.Add(t); autocorrs.Add(autocorr[t]); } return (taus, autocorrs); } // Parallel computation is unnecessary as FFT-based autocorrelation is already fast // Use GetAutoCorrelationPoints for parallel computation } public class Vec3 { public double X { get; } public double Y { get; } public double Z { get; } public Vec3(double x, double y, double z) { X = x; Y = y; Z = z; } // Compute the magnitude of the vector public double Magnitude() { return Math.Sqrt(X * X + Y * Y + Z * Z); } } public class AutocorrelationDriver { public static void Main() { // Define your list of 3D vectors List<Vec3> vectors = new List<Vec3> { new Vec3(1, 1, 1), new Vec3(2, 2, 2), new Vec3(3, 3, 3), new Vec3(4, 4, 4), new Vec3(5, 5, 5) }; // Compute the autocorrelation var aurocorr = AutocorrVec3.GetAutoCorrelationPoints(vectors, vectors.Count - 1); // Output the results Console.WriteLine("Lag\tAutocorrelation"); for (int i = 0; i < aurocorr.taus.Count; i++) { Console.WriteLine($"{aurocorr.taus[i]}\t{aurocorr.autocorrs[i]}"); } Console.ReadKey(); } } } 上面的代码是我写的。 正确的输出如下: 但是,我编写的代码给出了以下输出: Lag Autocorrelation 0 1 1 0.727272727272727 2 0.472727272727273 3 0.254545454545455 4 0.0909090909090911 如何修复我的代码? 就目前而言,基于 FFT 的计算实际上没有任何问题。您记得在所有正确的位置进行零填充(做得很好),它给出了我对您的测试数据所期望的答案。 这两个代码之间的差异是因为您忘记了通过贡献滞后分量 1/(n-t) 的数量来标准化 FFT 计算的输出。 应用该校正进行 FFT 相关性计算可得到与玩具测试数据上的普通方法完全相同的答案。 我不太确定将相关函数应用于矢量大小的优点,但这完全是另一回事。这是示例数据的表格。 数据 滞后 sum(a(i).a(i+t)) 规范 /(n-t) 范数 C(t,v5) 1 0 55 1 0.2 1 2 1 40 0.727272727 0.181818182 0.909090909 3 2 26 0.472727273 0.157575758 0.787878788 4 3 14 0.254545455 0.127272727 0.636363636 5 4 5 0.090909091 0.090909091 0.454545455 您可以通过一种方法来进一步优化它,方法是返回向量中的幂,而不是返回magnitude = sqrt(X.X+Y.Y+Z.Z),然后在返回“X.X+Y.Y+”时对其进行平方Z.Z" 它已准备好用于计算功率谱。我真的不确定这个计算有什么物理解释。 顺便说一句,通过使用 FFT 的实数到复数共轭对称版本,您几乎可以将速度提高一倍并将内存需求减半。这避免了将真实数据提升为零虚部的复杂数据。首先尝试“按原样”,因为对于较大的 N,Nlog N 比 N^2 小很多。 但是速度提高两倍可能仍然值得付出额外的努力。

回答 1 投票 0

从同一向量中推回一个元素是否安全?

向量v; v.push_back(1); v.push_back(v[0]); 如果第二次push_back导致重新分配,则对向量中第一个整数的引用将不再有效。那么这不安全吗?

回答 10 投票 0

有没有办法防止 std::vector 在发生调整大小时动态取消分配内存?

我想使用 std::vector 代替原始 C 数组,以避免弄乱我的代码。 然而,std::vector 的活力的挫折之一是底层数据不可靠......

回答 1 投票 0

在 C++ 中使用 2D 向量时出现分段错误 (SIGSEGV)

我正在 GFG 上解决这个问题。我写的解决方案是 向量 > stockBuySell(向量 A, int n){ 矢量>天; int p=0...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.