🚀Julia言語の配列において条件を満たす行を削除する2023/12/28に公開2件Juliatech 概要 Julia言語の配列において条件を満たす行を削除する方法を記載する。 参考コード data = [ [1, 0, 0], [0, 0, 0], [0, 1, 0], [0, 0, 0], [0, 0, 0], [0, 0, 1] ] filtered_data = [line for line in data if !all(n -> n == 0, line)] @show filtered_data # filtered_data = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] Discussionantimon22023/12/28少し高度になりますが、この場合は、内包表記を使わずにBoolインデクシング(条件を記述して要素を抽出する書き方)でも良いですね。 data = [ [1, 0, 0], [0, 0, 0], [0, 1, 0], [0, 0, 0], [0, 0, 0], [0, 0, 1] ] filtered_data = data[.!all.(==(0), data)] @show filtered_data ## filtered_data = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] あとJuliaではジャグ配列(配列の配列)よりも、(各行の要素数が同じ、つまり矩形になるなら)2次元配列を使った方がメモリ効率や速度面等でのパフォーマンスが良くなります。 その場合の例も挙げておきます。 data2d = [ 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 ] # → 6×3 Matrix{Int64}になる filtered_data2d = data2d[.!all.(==(0), eachrow(data2d)), :] @show filtered_data2d ## filtered_data2d = [1 0 0; 0 1 0; 0 0 1] 以上、参考までに。 原子軌道2023/12/31コメントありがとうございます。周りに使っている人が居ないので、大変助かります。(別件ですが実践Julia入門、購入しています!!)
antimon22023/12/28少し高度になりますが、この場合は、内包表記を使わずにBoolインデクシング(条件を記述して要素を抽出する書き方)でも良いですね。 data = [ [1, 0, 0], [0, 0, 0], [0, 1, 0], [0, 0, 0], [0, 0, 0], [0, 0, 1] ] filtered_data = data[.!all.(==(0), data)] @show filtered_data ## filtered_data = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] あとJuliaではジャグ配列(配列の配列)よりも、(各行の要素数が同じ、つまり矩形になるなら)2次元配列を使った方がメモリ効率や速度面等でのパフォーマンスが良くなります。 その場合の例も挙げておきます。 data2d = [ 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 ] # → 6×3 Matrix{Int64}になる filtered_data2d = data2d[.!all.(==(0), eachrow(data2d)), :] @show filtered_data2d ## filtered_data2d = [1 0 0; 0 1 0; 0 0 1] 以上、参考までに。
Discussion
少し高度になりますが、この場合は、内包表記を使わずにBoolインデクシング(条件を記述して要素を抽出する書き方)でも良いですね。
あとJuliaではジャグ配列(配列の配列)よりも、(各行の要素数が同じ、つまり矩形になるなら)2次元配列を使った方がメモリ効率や速度面等でのパフォーマンスが良くなります。
その場合の例も挙げておきます。
以上、参考までに。
コメントありがとうございます。周りに使っている人が居ないので、大変助かります。(別件ですが実践Julia入門、購入しています!!)