極限の計算

極限とは、xの値をある一定値αに限りなく近づけるとき

limit(sin(x)/x, x, 0)
limit(x, x, oo)
limit(1/x,x, oo)
limit(x**x, x, 0)

極限

極限はlimit
ooは無限大
sin pai/2 = 1

from sympy import *
x = Symbol('x')
f = limit(sin(x)/x,x,oo)
print(f)

[vagrant@localhost python]$ python app.py
Traceback (most recent call last):
File “app.py”, line 1, in
from sympy import *
ModuleNotFoundError: No module named ‘sympy’

[vagrant@localhost python]$ pip install sympy
Collecting sympy
Downloading https://files.pythonhosted.org/packages/21/21/f4105795ca7f35c541d82c5b06be684dd2f5cb4f508fb487cd7aea4de776/sympy-1.4-py2.py3-none-any.whl (5.3MB)
|████████████████████████████████| 5.3MB 2.8MB/s
Collecting mpmath>=0.19 (from sympy)
Downloading https://files.pythonhosted.org/packages/ca/63/3384ebb3b51af9610086b23ea976e6d27d6d97bf140a76a365bd77a3eb32/mpmath-1.1.0.tar.gz (512kB)
|████████████████████████████████| 522kB 1.8MB/s
Building wheels for collected packages: mpmath
Building wheel for mpmath (setup.py) … done
Created wheel for mpmath: filename=mpmath-1.1.0-cp36-none-any.whl size=532240 sha256=ee5e33a6f32c6be4e88e8e90c0a201a978adcf3203bb8254e8765258844214b5
Stored in directory: /home/vagrant/.cache/pip/wheels/63/9d/8e/37c3f6506ed3f152733a699e92d8e0c9f5e5f01dea262f80ad
Successfully built mpmath
Installing collected packages: mpmath, sympy
Successfully installed mpmath-1.1.0 sympy-1.4
[vagrant@localhost python]$ python app.py
0

ほう、0なんだ。

from sympy import *
i = Symbol('i', integer=True)
n = Symbol('n', integer=True)
p = Rational(1,2)
f = summation(p**i,(i,1,n))
l = limit(f,n,oo)
print(l)

[vagrant@localhost python]$ python app.py
1

プログラミングってより、数学がわからんどダメだなー

要素の積集合

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_intersection = s1 & s2
print(s_intersection)

s_intersection = s1.intersection(s2)
print(s_intersection)

[vagrant@localhost python]$ python app.py
{1, 2}
{1, 2}

あ、これは面白い

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_difference = s1 - s2
print(s_difference)

s_difference = s2.difference(s1)
print(s_difference)

[vagrant@localhost python]$ python app.py
{0}
{3}

どちらか一方だけに含まれる要素
symmetric_difference

s_symmetric_difference = s1.symmetric_difference(s3)
print(s_symmetric_difference)

[vagrant@localhost python]$ python app.py
{0, 1, 3, 4}
すご。

python set型

和集合、積集合、部分集合などの計算の為、pythonのsetを

s = {1, 2, 2, 3, 1, 4}

print(s)
print(type(s))

[vagrant@localhost python]$ python app.py
{1, 2, 3, 4}

s = {i**2 for i in range(5)}

print(s)

s = {1, 2, 2, 3, 1, 4}
print(s)
print(len(s))

[vagrant@localhost python]$ python app.py
{0, 1, 4, 9, 16}
{1, 2, 3, 4}
4

和集合

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_union = s1 | s2
print(s_union)

s_union = s1.union(s2)
print(s_union)

セットで計算

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_union = s1.union(s2,s3)
print(s_union)

centOSにmecabをインストール

cd /usr/local/src
wget “https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE” -O mecab-0.996.tar.gz
sudo tar -zxvf mecab-0.996.tar.gz

[vagrant@localhost src]$ ls
mecab-0.996 mecab-0.996.tar.gz

sudo ./configure –with-charset=utf8

sudo wget “https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM” -O mecab-ipadic-2.7.0-20070801.tar.gz

$ tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure –with-charset=utf8
$ make
$ make install

[vagrant@localhost mecab-ipadic-2.7.0-20070801]$ echo すもももももももものうち | mecab
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

ぎゃああああああああああああああああああああ

$ git clone https://github.com/rsky/php-mecab.git
$ cd php-mecab/mecab/
$ phpize
$ ./configure –with-mecab=/usr/local/src/mecab-0.996/mecab-config
$ make
$ make test
$ make install
[vagrant@localhost mecab]$ ls /usr/lib64/php/modules/ | grep mecab
mecab.so
[vagrant@localhost mecab]$ vim /etc/php.d/mecab.ini
-bash: vim: コマンドが見つかりません
[vagrant@localhost mecab]$ vi /etc/php.d/mecab.ini
[vagrant@localhost mecab]$ sudo vi /etc/php.d/mecab.ini
[vagrant@localhost mecab]$ sudo service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: httpd: Could not reliably determine the server’s fully qualified domain name, using localhost.localdomain for ServerName
[ OK ]
[vagrant@localhost mecab]$ php -m | grep mecab
mecab

ぎょえええええええええええええええええええ

$str = 'すもももももももものうち';

$mecab = new Mecab_Tagger();
$nodes = $mecab->parseToNode($str);
foreach ($nodes as $n) {
    $items = $n->getFeature();
    echo $items . "<br>";
}

BOS/EOS,*,*,*,*,*,*,*,*
名詞,一般,*,*,*,*,すもも,スモモ,スモモ
助詞,係助詞,*,*,*,*,も,モ,モ
名詞,一般,*,*,*,*,もも,モモ,モモ
助詞,係助詞,*,*,*,*,も,モ,モ
名詞,一般,*,*,*,*,もも,モモ,モモ
助詞,連体化,*,*,*,*,の,ノ,ノ
名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
BOS/EOS,*,*,*,*,*,*,*,*

oh my god.

python等比数列

import numpy as np
rates = np.ones(10) * 3
print(rates ** np.arange(10))

[vagrant@localhost python]$ python myapp.py
[1.0000e+00 3.0000e+00 9.0000e+00 2.7000e+01 8.1000e+01 2.4300e+02
7.2900e+02 2.1870e+03 6.5610e+03 1.9683e+04]

np.ones は配列の全ての要素を1で初期化する

等差数列の和

等差数列の和の公式は
S = 1/2*n(a + l)
これは基本中の基本でしょう。
pythonで表現します。

範囲の足し算

sum = 0
for i in range(1, 100):
	sum += i
print(sum)

[vagrant@localhost python]$ python myapp.py
4950

forでなく、sumを使う場合

n =99
print(sum(range(1, n + 1)))

[vagrant@localhost python]$ python myapp.py
4950
答えは同じです

公式を使う場合

def sn(a, lim):
	n = int(lim) / a
	l = n * a
	return (a + l) * n / 2
print(sn(3,999))

[vagrant@localhost python]$ python myapp.py
166833.0

公式でもできるが、rangeやsumでできてしまうって事ね。
ただ、これ、気象計算や原子力など計算量が大きくなった場合に何が一番早いかってところだな。

pythonで等差数列

初項と公差をarray(range(x,y,z))で指定する

import numpy as np 
x = np.array(range(7, 187, 11))
print(x)

[vagrant@localhost python]$ python myapp.py
[ 7 18 29 40 51 62 73 84 95 106 117 128 139 150 161 172 183]

arangeやlimspaceなどの方法もある

import numpy as np 
x = np.arange(6, 100, 12)
print(x)

y = np.linspace(8, 120, 15)
print(y)

[vagrant@localhost python]$ python myapp.py
[ 6 18 30 42 54 66 78 90]
[ 8. 16. 24. 32. 40. 48. 56. 64. 72. 80. 88. 96. 104. 112.
120.]

linspaceは難しい等差数列ができるようで、応用が効くようだ。

Slabのメモリ使用量

SReclaimableとSUnreclaimを足すとSlabになる

[vagrant@localhost python]$ cat /proc/meminfo | grep “Slab\|claim”
Slab: 116948 kB
SReclaimable: 58056 kB
SUnreclaim: 58892 kB

slabの内訳。avtab_nodeが多いか。
[vagrant@localhost python]$ slabtop –once –sort=c | head -n 12
Active / Total Objects (% used) : 1312788 / 1350423 (97.2%)
Active / Total Slabs (% used) : 26234 / 26234 (100.0%)
Active / Total Caches (% used) : 98 / 183 (53.6%)
Active / Total Size (% used) : 97729.34K / 103000.36K (94.9%)
Minimum / Average / Maximum Object : 0.02K / 0.08K / 4096.00K

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
27184 27184 100% 0.98K 6796 4 27184K ext4_inode_cache
640944 640732 99% 0.02K 4451 144 17804K avtab_node
417872 417265 99% 0.03K 3731 112 14924K size-32
117216 87569 74% 0.10K 3168 37 12672K buffer_head
182 182 100% 32.12K 182 1 11648K kmem_cache

[vagrant@localhost python]$ sync; echo 2 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: 許可がありません

何いいいいいいいいいいいい

cat /proc/meminfo

/proc/meminfoは、カーネルが内部的に管理している枠組みでのメモリ情報

[vagrant@localhost python]$ cat /proc/meminfo
MemTotal: 1020076 kB
MemFree: 299244 kB
Buffers: 95364 kB
Cached: 408216 kB
SwapCached: 8328 kB
Active: 147128 kB
Inactive: 429060 kB
Active(anon): 36828 kB
Inactive(anon): 42764 kB
Active(file): 110300 kB
Inactive(file): 386296 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2064380 kB
SwapFree: 1616664 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 65920 kB
Mapped: 16524 kB
Shmem: 6984 kB
Slab: 116968 kB
SReclaimable: 58068 kB
SUnreclaim: 58900 kB
KernelStack: 2016 kB
PageTables: 10412 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2574416 kB
Committed_AS: 1137548 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 12012 kB
VmallocChunk: 34359708156 kB
HardwareCorrupted: 0 kB
AnonHugePages: 12288 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 8128 kB
DirectMap2M: 1040384 kB

Slab: 116968 kB なので、slabはそこそこありますね。