LoginSignup
3
1

More than 3 years have passed since last update.

LINQってNumpyに似てる!

Posted at

はじめに

最近、C#を勉強し始め、LINQに出会ったのですが、「これPythonのNumpyに似てる!」と思ったので、自分の頭の整理も兼ねて実装を比較してみます。

参考にさせて頂いたページ

実装の比較

処理内容毎にLINQの実装、Numpyの実装の順に書いています。

配列の作成

Sample.cs
var arr = Enumerable.Range(0, 6);
Console.WriteLine(string.Join(" ", arr));
// 0 1 2 3 4 5
Sample.py
arr = np.arange(6)
print(arr)
# [0 1 2 3 4 5]

Sum

Sample.cs
Console.WriteLine(arr.Sum());
// 15
Sample.py
print(arr.sum())
# 15

Max

Sample.cs
Console.WriteLine(arr.Max());
// 5
Sample.py
print(arr.max())
# 5

Sort(降順)

Sample.cs
var arr2 = arr.Reverse();
Console.WriteLine(string.Join(" ", arr2));
// 5 4 3 2 1 0
Sample.py
arr.sort()
print(arr[::-1])
# [5 4 3 2 1 0]

末尾の要素を取得

Sample.cs
Console.WriteLine(arr.Last());
// 5
Sample.py
print(arr[-1])
# 5

部分配列を取得

Sample.cs
var arr3 = arr.Skip(1).Take(3);
Console.WriteLine(string.Join(" ", arr3));
// 1 2 3
Sample.py
print(arr[1:-2])
# [1 2 3]

条件指定で部分配列を取得

Sample.cs
var arr4 = arr.Where(x => x % 2 == 0);
Console.WriteLine(string.Join(" ", arr4));
// 0 2 4
Sample.py
print(arr[arr % 2 == 0])
# [0 2 4]

加工

Sample.cs
var arr5 = arr.Select(x => x * x);
Console.WriteLine(string.Join(" ", arr5));
// 0 1 4 9 16 25
Sample.py
print(arr * arr)
# [ 0  1  4  9 16 25]

複数のシーケンスをまとめてループ

Sample.cs
var arr6 = arr;
var arr7 = arr.Zip(arr6, (a1, a6) => a1 + a6);
Console.WriteLine(string.Join(" ", arr7));
// 0 2 4 6 8 10
Sample.py
arr2 = arr
arr3 = np.array([], dtype=np.int32)
for a1, a2 in zip(arr, arr2):
    arr3 = np.append(arr3, a1 + a2)
print(arr3)
// [ 0  2  4  6  8 10]
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1