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はそこそこありますね。

Linux psコマンド

psはLinux上で現在動作しているプロセスを表示するコマンド

[vagrant@localhost python]$ ps
PID TTY TIME CMD
5300 pts/1 00:00:00 ps
32152 pts/1 00:00:01 bash

オプションやgrepなどを組み合わせて使用する

linux free

freeコマンドは空きメモリと使用しているメモリの容量を表示するコマンド

[vagrant@localhost python]$ free
total used free shared buffers cached
Mem: 1020076 720212 299864 6984 94792 408204
-/+ buffers/cache: 217216 802860
Swap: 2064380 447716 1616664

メモリー、swapのused, freeが表示されているのがわかります。

Linux topコマンド

topコマンド
->実行中のプロセスをリアルタイムで表示
->実行中のプロセスをCPU利用率が高い順に表示

[vagrant@localhost python]$ top

top – 22:20:14 up 8 days, 34 min, 1 user, load average: 0.13, 0.30, 0.33
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1020076k total, 723252k used, 296824k free, 94484k buffers
Swap: 2064380k total, 447716k used, 1616664k free, 408512k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5118 vagrant 20 0 15024 1296 1004 R 0.3 0.1 0:00.80 top
1 root 20 0 19232 604 432 S 0.0 0.1 0:01.64 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:02.98 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:01.49 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 6:00.91 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_long/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_power_ef
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
16 root 20 0 0 0 0 S 0.0 0.0 0:03.42 sync_supers

これを見ると、top, init, kthreadd の消費が高いですね。