書きかけ
なぜこれが高校の数学、理科の学習指導要領外(要確認)なのか分からない
指数関数の応用では、指数(exponent)、基数(base, 底(てい))には無次元の量を代入し、単位を持つ量は指数関数の係数にする。例題1:複利式で預けた預金の残高
例題2:放射性物質の半減期
import openpyxl workbook = openpyxl.Workbook() # 新規作成 worksheet = workbook.active # ワークシートの選択 worksheet.cell(1,1).value ='test' # データ入力 cell(行,列) 添字1から worksheet['B2'].value ='data' # データ入力 workbook.save('./test.xlsx') # ブックの保存 workbook.close() # ブックを閉じる
keep_vba, data_only, ...
openpyxl.reader.excel module — openpyxl 3.0.9 documentation
import openpyxl wb = openpyxl.load_workbook('./test.xlsm', data_only=True, keep_vba=True)
SUPPORTED_FORMATS = ('.xlsx', '.xlsm', '.xltx', '.xltm')*1
iter_rows, min_row, ...
openpyxl.worksheet.worksheet module — openpyxl 3.0.9 documentation
col_idx, column_letter, ...
openpyxl.cell.cell module — openpyxl 3.0.9 documentation
import openpyxl wb = openpyxl.load_workbook('./test.xlsm', data_only=True, keep_vba=True) ws = wb.active # 全部のセルを走るループ for row in ws: # row は cell オブジェクトの tuple for cell in row: #行番号,列番号,列文字,データ(値,式) print(cell.row,cell.col_idx,cell.column_letter,cell.value) # 全部のセルを走るループ2 for iRow in range(1,ws.max_row + 1) : for iCol in range(0,ws.max_column) : print(iRow,iCol,ws[iRow][iCol].value) # 特定の列を読む for row in ws.iter_rows(min_row=2): # 2行目以降のA列を読むコード a = row[0].value # tuple なので添え字は int b = row[ openpyxl.utils.column_index_from_string('A') - 1 ].value print(a,b)
python - Apply 'wrap_text' to all cells using openpyxl - Stack Overflow
import copy import openpyxl wb = openpyxl.Workbook() ws = wb.active cell = ws.cell(1,1) algn = copy.copy(cell.alignment) algn.wrapText = True cell.alignment = algn cell.value='all very long sentences should be wrapped.' wb.save('./test.xlsx')
ws.cell(1,1).alignment.wrapText = True と書くと次のエラーを吐く:AttributeError: Style objects are immutable and cannot be changed.Reassign the style with a copy
ws['A1'].alignment = openpyxl.styles.Alignment(wrapText=True)
という書き方もある
ws.column_dimensions['A'].width = 80 ws.row_dimensions[1].height=90
wrapTextで自動で縦に広がったセルには「高さの情報」は付与されないようだ[2022.5.2]
授業のための覚書*1。 Cayley-Hamiltonの定理*2, 剰余の定理*3, Lagrange の補間*4を用いると、対角化の操作*5をスルーして行列のn乗を求めることができるのでメモ*6。シルベスターの公式*7の応用例()になっている。行列のn乗なんて、ケーリー・ハミルトンの定理の式で与えらえる行列の多項式の剰余類への還元だから、多項式の剰余の定理を使えば十分。例題は行列: より の解を , , とすると*8、 (, も同様)である。これは3点 , , を通る2次関数を求めることに他ならないから、ラグランジュ補間の公式より
.
よって行列 の固有値 , , が非零で縮退がないならば
行列の乗:公式の意味はケイリー・ハミルトンの定理より固有値に属する固有ベクトルの空間への射影をとる行列(Frobenius covariant, フロベニウス共変行列*9)を構成できるということ*10。だからこんな応用もある;
.
逆行列():
.
任意のベクトルの固有ベクトルへの分解():式の形はきれいだけど、一般の場合に計算のコストが高そう。この式のありがたみの極大値は「整数成分の行列の筆算」くらいかも。
.
*1:筆算での処理を念頭に置いている。数式処理ソフトで瞬殺という意見はいまは無しの方向で。
*6:ケーリーハミルトン n乗 - Google 検索 剰余類を用いた解法、漸化式と関連付けた解法は、高校数学に行列があった頃のページがいくつか残っているようだ。
*7:Sylvester's formula - Wikipedia このページには固有値が縮退をしている一般の場合の公式も記述されている。
*8:ここでは重解を持たないと前提する。
ドキュメント:https://docs.python.org/3/index.html
In triple-quoted literals, unescaped newlines and quotes are allowed (and are retained), except that three unescaped quotes in a row terminate the literal. (A “quote” is the character used to open the literal, i.e. either ' or ".)
かなり苦労したのでメモ*1。このPythonコードの実行速度は下のVBAコードより圧倒的に速い。
#-*- coding: shift_jis -*- import openpyxl #元データのシート wb = openpyxl.load_workbook('testIn.xlsx',data_only=True) ws = wb['Sheet1'] #結合したセルの Range データを文字情報化して、バッファする listMerged=[] for rng in ws.merged_cells: listMerged.append(str(rng)) #セルの結合を解除し、左上の値を代入する for strRng in listMerged: leftTop = (strRng.split(':'))[0] ws.unmerge_cells(strRng) for row in ws[strRng]: for cell in row: cell.value = ws[leftTop].value #結果を保存する wb.save(filename='testOut.xlsx')
Sub cellUnmergeDataSpread(r As Range) ' ' 入力の r で決まる Range 内の結合セルデータを調べて、 ' セルの結合を全部解除して、結合してた全てのセルにデータをばらまく ' Dim o As Object, r0 As Range, v, i, j '[セル番号=>データの入ったセルのセル番号]の辞書の作成 Set o = CreateObject("Scripting.Dictionary") For i = 1 To r.Rows.Count For j = 1 To r.Columns.Count Set r0 = r.Cells(i, j) v = r0.MergeArea.item(1).Address(0, 0) o.Add r0.Address, v Next j Next i r.unmerge '結合解除はここ For Each v In o '結合解除したセルに左上セルのデータのコピー r.Parent.Range(v).Value = r.Parent.Range(o.item(v)).Value Next v End Sub
mergeする方は結合セルの探索にopenpyxl.worksheet.cell_range.CellRange*2を使うといいのかな?
GCC Developer Lite (GDL) を使って自分のPCで hello world プログラムと、マイコン(ここではH8-3664F)用プログラムをC言語で作成できるようになるまでの覚書。
2022.3.1に GDL 2.7 がリリースされて、インストールの方法が大きく変わっている。本稿は GDL 2.5 の時点のもの。
以上でGDLのインストールは終了。H8-3664FとWindows(x64)の両方をインストールする場合には、この作業を2回行う(このとき先にインストールされたものが消されることはない)。
注意:ここの説明は Windows(x64) がインストールしてあるものとして書かれている。
#include <stdio.h> int main (void) { printf("hello, world!"); return 0; }