亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為使用矩陣的先前值的 Matlab 矩陣操作查找等效的 LINQ 查詢

為使用矩陣的先前值的 Matlab 矩陣操作查找等效的 LINQ 查詢

C#
ITMISS 2022-08-20 15:17:46
我想使用 LINQ 簡化 C# 中 List 的生成。我的目標是使用另一個 List 的值使用操作填充新 List。我愿意使用第三方庫,如Deedle或MathNet,如果它們可以重現與我當前解決方案類似的性能。在 Matlab 中實現目標的等效方法是使用簡單的矩陣運算和點運算,如以下代碼所示:dailyRetList = (dailyCloseList(2:end) - dailyCloseList(1:end-1))./dailyCloseList(1:end-1)這將創建一個新數組,迭代并為每個元素從中減去,然后將結果除以,最后將值推送到新創建的數組。dailyCloseListdailyCloseList[i-1]dailyCloseList[i]dailyCloseList[i-1]我目前解決這個問題的解決方案是:var dailyCloseList = new List<double>{11.8d, 11.7d, 13d, 12.6d, 15d};var dailyRetList = new List<double>();for (var i = 1; i < dailyCloseList.Count; i++){     dailyRetList.Add((dailyCloseList[i] - dailyCloseList[i-1])/dailyCloseList[i-1]);}
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

你可以在 Linq 中使用它:

var m = Enumerable.Range(1, dailyCloseList.Count - 1)
                .Select(i => (dailyCloseList[i] - dailyCloseList[i - 1])/ dailyCloseList[i - 1])
                .ToList();

檢查異??偸怯袔椭?。DivideByZero


查看完整回答
反對 回復 2022-08-20
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

另一種選擇是使用:Zip

var change = dailyCloseList.Zip(dailyCloseList.Skip(1))
                           .Select((x,y) => (y - x)/x)
                           .ToList();


查看完整回答
反對 回復 2022-08-20
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

我認為最林克的方式是這個


var dailyRetList = dailyCloseList

    .ConsecutivePairs((a, b) => (b - a) / a)

    .ToList();

當然,你必須定義函數(曾經在某個地方)。但與 Guaravsa 解決方案不同,它適用于 ,因此不需要直接索引訪問。但這一切都是有代價的。您最初的簡單循環比任何使用枚舉的解決方案快3倍左右(順便說一句,您應該在開始時預先分配List以獲得最佳性能)。ConsecutivePairsIEnumerable


函數實現,只是為了完整性:


public static IEnumerable<Q> ConsecutivePairs<T, Q>(this IEnumerable<T> sequence, Func<T, T, Q> selector)

{

    using(var en = sequence.GetEnumerator())

    {

        if (!en.MoveNext()) { yield break; }

        T prev = en.Current;

        while (en.MoveNext())

        {

            yield return selector(prev, en.Current);

            prev = en.Current;

        }

    }

}


查看完整回答
反對 回復 2022-08-20
  • 3 回答
  • 0 關注
  • 130 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號