- 1. すべての行の長さが不定な 2 次元配列の出力
- 2. 炭酸イオンを1つの点に置換した結晶構造の作成ログ
- 3. 直角三角形の出力 (paizaランク D 相当)
- 4. mod
- 5. 【langchain】TFIDFRetrieverのマージ
- 6. 数値を異なる長さで 2 行出力 Python3編
- 7. 【Python】filter関数で第一引数に None / 常にTrueを返す関数 /常にFalseを返す関数 を指定してみる
- 8. 四旬節第2金曜日とイースターとペンテコステの日付を求めるプログラム
- 9. 指定したパスで経路を探索する
- 10. N 個の文字を半分ずつ出力 (paizaランク D 相当)
- 11. [python] Anaconda/Miniconda環境の削除
- 12. 【n * n の 2 次元配列の表示】N * N の九九表の出力
- 13. 九九表作成
- 14. 3 * 3 の出力
- 15. (D->C)2 * 2 の出力
- 16. AWS Lambda Layerを利用しようとしてハマった話
- 17. Python3-Matplotlibの使い方 ~信号処理~ 複数信号の表示,間隔・空白の調整など
- 18. 【Django】エラー “[‘“” value must be a decimal number.’]” の原因と解決方法
- 19. (D⇒C)大きな数値を 3 けたごとにカンマ区切りで出力(逆パターン)
- 20. TfidfVectorizer.fitでtokenizeとidf計算にかかる時間の計測
すべての行の長さが不定な 2 次元配列の出力
今回はこれ
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_step4
前回のやつのすべての行の長さが不定であるものを出力せよという問題
たとえば、
4
2 4 3 1
というふうに出力されたら
1 2
1 2 3 4
1 2 3
1
というふうに出力しないといけないという問題。
前回の応用なんだけど、簡単ではある。
ただし、Nを全く使っていない。“`py
N = int(input())
M = input().split()
for j in M:
j = int(j)
for i in range(1,j+1):
if i == j:
print(i)
else:
print(i,end=” “)“`
なので、ちょっと考える。
すべての行の長さが不定な2次元配列の出力ということから、
おそらく、最初に配列を作っておいてそこから条件に沿って出力するというやり方ではないか?
炭酸イオンを1つの点に置換した結晶構造の作成ログ
# 最終目標設定
既存の結晶構造から,炭酸イオン(CO32-)を1つの点に置換した新しい結晶構造を作成する.## 今回行ったことの流れ
1.約30万個のPOSCARファイル※の中から,元素種C,Oを含むものを抽出する.
※ COD(Crystallography Open Database[1])から得たcifファイルをcif2cell[2]を用いて,変換した.
2. 1. で抽出したPOSCARファイルから,各原子について1.7Å※以内の隣接原子のリストPOSCAR.nnlistを作成する.
※ 炭酸イオンの熱化学半径は1.64Å[3]
3. 2.で得たPOSCAR.nnlistから,隣接原子のリストに,Cを1つかつOを3つ含むPOSCAR.nnlistを抽出する.
4. 3.で抽出したPOSCAR.nnlistに対して,Cを1つかつOを3つ含む原子団のxyz座標を,各々の原子座標の相加平均で置き換える.
5. オリジナルと
直角三角形の出力 (paizaランク D 相当)
今日の問題はこれ。
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_step3出力された数字に従って下記の様に出力する問題
たとえば4だったら
1
1 2
1 2 3
1 2 3 4
というふうに出力する。
これが直角三角形に見えるように出力するという意味今までの積み重ねから、難しくはなかった
“`py
N = int(input())for i in range(1,N+1):
for j in range(1,i+1):
if j == i:
print(j)
else:
print(j,end=” “)
“`
mod
[picoCTF][Cryptography][basic-mod1]# Writeup
* 解法が書いてあるので、翻訳ソフトで翻訳。
DeepLって分かりやすい日本語に変換してくれます。
![screenshot 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/0f52be36-8979-6367-431c-f6f92aeccbcf.png)
![screenshot 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/36bb1078-1b42-b63a-a8f1-527118c2da89.png)
* BingChatに作ってもらったプログラムを微修正。
~~~:python
# 入力データ
numbers = [128, 322, 353, 235, 336, 73, 198, 332, 202, 285, 57, 87, 262,
【langchain】TFIDFRetrieverのマージ
# 概要
異なるコーパスから作られた複数のTFIDFRetrieverを1つにする方法を検討しました。# 背景
TFIDFRetrieverはlangchainでキーワード検索をするときの有用な選択肢の一つです。
開発途中で検索対象の文書を追加する場合など、TFIDFRetrieverの更新やマージをしたくなることがあります。FAISSRetrieverなどDenseな埋め込みに基づくRetrieverの場合はdocstoreとembeddingをただ拡張すればよいのですが、TFIDFなどSparseなRetrieverの場合、単語のIDやIDF値がコーパスごとに決定されるため、単純にマージはできません。そこで方法を考えました。
(注:キーワード検索用のSparseなRetrieverとしては、BM25Retrieverのほうがよりメジャーなのですが、BM25Retrieverは内部で使用されているrank_bm25の扱いに習熟できていないため、今回はTFIDFRetrieverを対象とします。)
一番シンプルなのは、複数のデータセットをマージして、TFIDFRetriev
数値を異なる長さで 2 行出力 Python3編
続いてこちら
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_step2数値 N と M が与えられるので、 1 行目には N 個、 2 行目には M 個の数値を出力する、という問題。
私はこちらの回答.
“`py
arr = input().split()
for i in range(1,int(arr[0])+1):
if i == int(arr[0]):
print(i)
else:
print(i,end=” “)
for j in range(1,int(arr[1])+1):
if j == int(arr[1]):
print(j)
else:
print(j,end=” “)“`
可読度をあげるなら、
問題にかかれているように“`py
arr = input().split()
N = int(arr[0])
M = int(arr[1])
“`
と
【Python】filter関数で第一引数に None / 常にTrueを返す関数 /常にFalseを返す関数 を指定してみる
# 概要
Pythonの`filter`関数で、以下のケースではどのような結果になるのだろう?と思ったので実施してみました。– 第一引数(`function`)に`None`を指定した場合
– 第一引数(`function`)が常に`True`を返す場合
– 第一引数(`function`)が常に`False`を返す場合## サンプルコード
“`py
def is_even(n):
return n % 2 == 0numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(is_even, numbers))
print(even_numbers)# 出力結果: [2, 4, 6, 8, 10]
“``filter()`関数は、第一引数に指定した関数(条件)に合致する要素を残します。
なので、上記の場合、偶数の要素のみが出力されます。第一引数に指定したものでフィルターしてくれる、というわけです。
しかし、この考えだと少し違うことがわかりました。
正確にいうと、`is_
四旬節第2金曜日とイースターとペンテコステの日付を求めるプログラム
四旬節第2金曜日とイースターとペンテコステの日付を求めるプログラムです。
`chmod +x pe.py`として実行して下さい。
pythonで書かれています。
“`pe.py
#!/usr/bin/python3
import datetime
from dateutil.easter import *for i in range(1000,3000):
ed=easter(i).toordinal() # イースター
xd=ed-30 # 四旬節第2金曜
pd=ed+49 # ペンテコステ
x=datetime.datetime.fromordinal(xd).date()
z=datetime.datetime.fromordinal(ed).date()
t=datetime.datetime.fromordinal(pd).date()
print(“Lent 2nd Friday:”,x,”Easter:”,z,” Pentecost:”,t)
“`### 実行結果
“`
Lent 2nd Fri
指定したパスで経路を探索する
# はじめに
ツリー構造になっているオブジェクトに対して、
指定したパスが存在するかどうか判定する処理を施す際になかなかいい処理が思い浮かばず…
何とか絞り出して、処理を実装することが出来ました…
## ツリー構造とは
枝分かれになっているデータ構造のことを言います。上の部分が「親」または「根」といい、
そこから枝分かれで生えているのが「子要素」になります。それぞれの領域を「ノード」、それらを繋いでいるのを「エッジ」といいます。
そして、子要素の無いノード、要は末端のノードは「葉」「リーフノード」と呼ばれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641311/739e775c-a87b-6afa-6c1f-4a9bddf91a09.png)
https://wa3.i-3-i.info/word1257.html
## ソース
“`python
def search_path(_module, path):
path_parts = path.
N 個の文字を半分ずつ出力 (paizaランク D 相当)
今日の問題はこれ
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_step1そんなに難しくない問題だと思って、
実際に下記のような回答を考えたのだが
`print(n+1)`のときにどうしても空白ができてしまうらしい。
print単独だと改行されるのは知っているが、空白になるのはなぜかわからず。“`python
N = int(input())
for i in range(N):
if i+1 == N/2:
print(i+1)
else:
print(i+1,end=” “)
“`
仕方がないので下のようにprintして吐き出してもらった“`python
N = int(input())
for i in range(N):
if i+1 == N/2:
print(i+1)
print(‘改行’)
else:
print(i+1,end=” “)
[python] Anaconda/Miniconda環境の削除
# 最初に
conda環境とpip環境は共存しないため、pip環境導入時にはアンインストールが必要となる。
環境変数やVSCodeのsettingsが問題になる可能性があるため、pip環境導入前に実施した方がよい。|環境|詳細|
|—|—|
|OS|Windows11|# anaconda-cleanの実行
まず、Anaconda Promptで削除用のパッケージをインストールする。“`:Anaconda Promp
conda install anaconda-clean
“`
インストール後、コマンド実行する。“`:Anaconda Promp
anaconda-clean –yes
“`# プログラムのアンインストール
「Windowsの設定」→「アプリ」→「アプリと機能」から、Anacondaを指定する。
「プログラムのアンインストール」を実行する。
実行完了後、anaconda関連のディレクトリが削除されていれば一旦完了。https://insilico-notebook.com/conda-uninstall/
# 設定保存ディレ
【n * n の 2 次元配列の表示】N * N の九九表の出力
今度は出力されるnまでの九九表を作れという問題。
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__2dim_array_boss
九九の問題があったのでわかりやすかった
一応、自然数が出されるけど、Nコの場合+1しないといけないが、
N番目のところをN+1としないように注意“`python
N = int(input())
for i in range(1,N+1):
for j in range(1,N+1):
if j == N:
print(j * i)
else:
print(j * i,end= ” “)“`
九九表作成
前回に続いてこちらも。
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__2dim_array_step3九九表を作れという問題。
まあ、phpでもあったfor複数ループをPythonでもやればいいだけ。
range関数が0からはじまるのでそこらへんの調整は必要だけど。“`python
for i in range(9):
for j in range(9):
print((j+1)*(i+1),end=””)
if (j+1) % 9 == 0:
print()
else:
print(” “,end=””)“`
めんどい場合は、一応こちらのrange関数でもできる(覚えよう)
むしろこっちのほうがロジックがわかりやすいか?“`python
for i in range(1, 10):
for j in range(1, 10):
if j == 9:
3 * 3 の出力
前回につづいてこちらも。
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__2dim_array_step2入力された半スペで区切られている 9 個の数値を 3 行 3 列の形式で出力という形。
前と同じ解法でいけるのでこちらで。“`py
tmp = input()
N = tmp.split()
for i in range(9):
if (i + 1) % 3 != 0:
print(N[i],end=” “)
else:
print(N[i],end=”\n”)
“`・Nにいれるところは
`N = input().split()` とやると1行でできる・他の方法として数値は普通にprintして、他の解法として半スペか改行をi番目ごとにprintするというのがある。下のようになる
(print()はそのままだと改行するから)“`py
for i in range(9):
print(N[i])
if i % 3 == 2:
(D->C)2 * 2 の出力
今日の問題はこれ
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__2dim_array_step1
・8,7,1,3を2*2の形で出力せよという問題私は
偶数番目のときに改行、奇数番目のときに半スペと考えて下記の様に実装“`py
N =[0,8,1,3]
for i in range(len(N)):
if (i + 1) % 2 == 1:
print(N[i],end=” “)
else:
print(N[i],end=”\n”)“`
ところが他にもあり
もっと簡単にできた“`py
print(“0 8¥n1 3”)
“`
うん、たしかにそうなんだよなぁ。。。
まあ数字4つだけだからな
まあ、それにしてもprint内でも改行コード使えるんやな
AWS Lambda Layerを利用しようとしてハマった話
## はじめに
AWS Lambdaにてサードパーティ製のライブラリを使いたいと思って調べたところ
Lambda Layerを使うとLambda関数間でライブラリを共有できるとのこと
じゃあ実際に使ってみようとしてハマった話です。## 結論
Lambda Layerへアップロードするローカルのフォルダ名は「python」にするLambda関数はLayerを読み込む実行パスとして「opt/python/Layer」となるらしく
圧縮前のディレクトリ名は「python」としておく必要があった。## 手順
今回利用したかったのは「line-bot-sdk」なので、これを例にしていきます。### ライブラリのインストール(ローカルへ)
“`bash
pip install line-bot-sdk -t python/
“`
pythonディレクトリは別途作成してください。### zipファイルに圧縮
“`bash
zip -r layer.zip python
“`### Lambda Layerへアップロード
“`bash
aws lambda pub
Python3-Matplotlibの使い方 ~信号処理~ 複数信号の表示,間隔・空白の調整など
### はじめに
matplotlibの使い方に関して,少しだけ知識が溜まってきたので一度整理します.https://matplotlib.org/
### 基本のグラフ
例えば以下のようなプログラムを実行してみましょう.“` python
import numpy as np
import matplotlib.pyplot as plt# 表示する信号 #######################
fs = 44.1e3
T = 1
f = 3
t = np.arange(0, T-1/fs, 1/fs)
x = np.sin(2*np.pi*f*t)
#################################### Set global plot style
plt.rcParams.update({
“text.usetex”: True,
“mathtext.fontset”: ‘stix’,
“font.family”: “STIXGeneral”,
“font.sans-serif”: “STIXGeneral
【Django】エラー “[‘“” value must be a decimal number.’]” の原因と解決方法
# エラー内容
Djangoアプリケーションを実装していたら以下のエラーに遭遇しました。
本記事ではこちらの原因と解決方法を記載します。“`
[‘“” value must be a decimal number.’]
“`# 原因と解決方法
原因は、`DecimalField`は空白文字列を有効な`Decimal`値に変換できないため。
サンプルコードを交えて説明します。### サンプルコード
“`models.py
class Sample(models.Model):
sample_char = models.CharField(max_length=100, null=True, blank=True)
sample_integer = models.IntegerField(null=True, blank=True)
sample_decimal = models.DecimalField(max_digits=3, decimal_places=1, null=True, blank=True)
“`上記の`models
(D⇒C)大きな数値を 3 けたごとにカンマ区切りで出力(逆パターン)
今日は前回の逆パターン
今日はPythonでこの問題
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_boss
・出力された数値を3桁ごとにカンマ区切りするというやつ
ただし、今度は前からではなく後ろから区切る
・前回教えてもらったf-stringを使えば簡単にできる・・・が、絶対意図と違う
(とりあえず示しておく)
“`
N = int(input())
print(f”{N:,}”)
“`
・意図はループからカンマを付けていくやつだとおもうたとえば
3546373 => 3,546,373 と変えるとしよう
この場合、3桁で桁数7を割ると1余る。
左から数えると1桁の次が必ずコンマがつく。では左から3桁ずつコンマが付く場合とどう調整するか。
下の通りやれば、左からi番目で3桁になれば、i%3=0となりコンマがつくので
354,637,3、となる。“`
for i in range(len(N)):
if i % 3 == 0 and i != 0:
TfidfVectorizer.fitでtokenizeとidf計算にかかる時間の計測
# 概要
TfidfVectorizer.fitにおいてtokenizeとidf計算にどのくらい時間を要しているのか調べました。# 背景
TfidfVectorizerのidf辞書のなるべく高速なマージ方法を検討したく、その事前準備として、TfidfVectorizer.fitのどの工程に時間がかかっているのかを調査しようと思いました。fitで時間がかかるのは、形態素解析(tokenize)とidfの計算なので、それら2つの時間を計りました。# 実装
ライブラリをインストールします。
“`bash
pip install scikit-learn datasets
“`大きな日本語のデータセットを用意します。
今回は[miracl-corpus](https://huggingface.co/datasets/miracl/miracl-corpus/viewer/ja)を使います。700万件弱の文章です。“`Python3
import time
import MeCab
from sklearn.feature_extraction.text import