numpy 使用

23. 圖像矩陣去掉一維 reshape(1, width*height).squeeze()
import numpy as np
import matplotlib.pyplot as plt

img_r = (plt.imread('1.gif')).astype(np.float64)
print(img_r.shape)
print(img_r[4][50])  # 老矩陣任取一點(diǎn)

img_r = img_r.reshape((1, img_r.shape[0] * img_r.shape[1], img_r.shape[2])).squeeze()
print(img_r.shape)
print(img_r[4 * 64 + 50])  # 新矩陣取同一點(diǎn)
(52, 64, 4)
[169. 167. 172. 255.]
(3328, 4)
[169. 167. 172. 255.]
22. 判斷兩個(gè)矩陣同一位置相等元素個(gè)數(shù)
import numpy as np

a = np.array([1,2,3,4])
b = np.array([2,2,3,3])

len(np.where(a==b)[0])
2
21. 注意:給矩陣中某列的某幾個(gè)元素賦值勿锅,別忘了
import numpy as np

x = np.diag([2,3,4]) # 對(duì)角陣
print(x)

idx = np.array([1,2])

x[0, idx] = 1  # 行賦值
print(x)

x[idx, 0] = 1  # 列賦值
print(x)
[[2 0 0]
 [0 3 0]
 [0 0 4]]
[[2 1 1]
 [0 3 0]
 [0 0 4]]
[[2 1 1]
 [1 3 0]
 [1 0 4]]
20. 求特征向量 np.linalg.eig
import numpy as np

x = np.diag((10,2,3)) # 對(duì)角陣
print(x)

eigen_vals, eigen_vecs = np.linalg.eig(x)
print(eigen_vals)
print(eigen_vecs)

可以看出,每一列表示一個(gè)特征向量

[[10  0  0]
 [ 0  2  0]
 [ 0  0  3]]
[10.  2.  3.]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

還可以求得 按照特征值排序 的特征向量 np.linalg.eigh枣氧,升序

eigen_vals, eigen_vecs = np.linalg.eigh(x)  # 默認(rèn) L溢十,也可以設(shè)置為 U
print(eigen_vals)
print(eigen_vecs)
[ 2.  3. 10.]
[[0. 0. 1.]
 [1. 0. 0.]
 [0. 1. 0.]]

一般需要降序排列的特征向量,如 PCA达吞,可以 reverse 一下

print(eigen_vals[::-1])
reverse_idx = range(x.shape[0])[::-1]
print(eigen_vecs[:, reverse_idx])
[10.  3.  2.]
[[1. 0. 0.]
 [0. 0. 1.]
 [0. 1. 0.]]
19. np 矩陣 softmax 函數(shù)(一種歸一化的方法)
import numpy as np
z = np.array([1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0])
print(np.exp(z)/sum(np.exp(z)))
18. np 矩陣對(duì)每個(gè)元素實(shí)現(xiàn) relu = max(0, x) np.maximum
a = np.random.rand(2, 3) - 0.5
print(a)
print(np.maximum(0, a))
[[ 0.12902265 -0.26880289 -0.34555143]
 [ 0.21141166 -0.130721   -0.4073654 ]]
[[0.12902265 0.         0.        ]
 [0.21141166 0.         0.        ]]
17. np 矩陣排序反轉(zhuǎn)
k = 10
a = np.random.permutation(500)[:k]
print(a)
b = np.argsort(a)
print(b)
c = np.argsort(a)[::-1]
print(c)
[345 245 201 362  41  25  51 332  87 491]
[5 4 6 8 2 1 7 0 3 9]
[9 3 0 7 1 2 8 6 4 5]
16. np 矩陣統(tǒng)計(jì)整數(shù)個(gè)數(shù) np.bincount

只能計(jì)算整數(shù)數(shù)組张弛,將每個(gè)數(shù)字的值轉(zhuǎn)化成結(jié)果數(shù)組的 idx,結(jié)果數(shù)組中每個(gè)值表示相應(yīng) idx 的元素個(gè)數(shù)酪劫。

a = np.array([1, 10])
np.bincount(a)
array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1], dtype=int64)
15. np 矩陣增加一維
a = np.array([[2, 5, 7, 8, 9, 89], [6, 7, 5, 4, 6, 4]])
print(a.shape)
b = a[np.newaxis,:]  # 可以添加在任何位置
print(b.shape)
print(a.shape)
(2, 6)
(1, 2, 6)
(2, 6)
14. np 矩陣找到 每行中最小值 所在的位置
a = np.array([[2, 5, 7, 8, 9, 89], [6, 7, 5, 4, 6, 4]])
b = np.argmin(a, axis=1)
print(b)
[0 3]
13. np 矩陣中的 log 函數(shù)
print(np.log(10))  # 自然對(duì)數(shù)
print(np.log2(10))
print(np.log10(10))
2.302585092994046
3.321928094887362
1.0
12. np 矩陣從小到大排列 輸出其在原始矩陣的 idx np.argsort
y = np.random.permutation(10)
print(y)
sorted_idx = np.argsort(y)
print(sorted_idx)
[8 2 5 6 7 9 4 1 3 0]
[9 7 1 8 6 2 3 4 0 5]
11. np 矩陣眾數(shù)計(jì)算 scipy.stats.mode
from scipy import stats

a = np.array([[6, 8, 3, 0],
              [3, 2, 1, 7],
              [8, 1, 8, 4],
              [5, 3, 0, 5],
              [4, 7, 5, 9]])
stats.mode(a)  # 默認(rèn)沿行比較
ModeResult(mode=array([[3, 1, 0, 0]]), count=array([[1, 1, 1, 1]]))

stats.mode(a) 默認(rèn) axis = 0吞鸭,沿行比較,相當(dāng)于是將每一列拿出來比較覆糟,取出頻數(shù)最大的值刻剥,如果頻數(shù)一樣,就選這些數(shù)中數(shù)值最小的滩字。

stats.mode(a, axis=1)  # 沿列比較透敌,比較每一行種...
ModeResult(mode=array([[0],
       [1],
       [8],
       [5],
       [4]]), count=array([[1],
       [1],
       [2],
       [2],
       [1]]))

也可以得到全局中頻數(shù)最大的盯滚,不指定 axis 即可

stats.mode(a, axis=None)
ModeResult(mode=array([3]), count=array([3]))
10. np 做網(wǎng)格矩陣 并得到網(wǎng)格坐標(biāo)點(diǎn)
xmin, xmax = 0, 10  # 11
ymin, ymax = 0, 5  # 6
step = 1
mesh = np.meshgrid(np.arange(xmin, xmax + step, step),  # 網(wǎng)格矩陣
                   np.arange(ymin, ymax + step, step))
mesh  # 組合起來就是 網(wǎng)格坐標(biāo)點(diǎn)

兩個(gè) array,網(wǎng)格中所有點(diǎn)的 橫坐標(biāo) 和 縱坐標(biāo)

[array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10]]),
 array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
        [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
        [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
        [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]])]

組合這兩個(gè) array 就得到了所有的坐標(biāo)點(diǎn)

mesh_f = np.vstack((mesh[0].flatten(), mesh[1].flatten())).T
array([[ 0,  0],
       [ 1,  0],
       [ 2,  0],
       [ 3,  0],
       [ 4,  0],
       [ 5,  0],
       [ 6,  0],
       [ 7,  0],
       [ 8,  0],
       [ 9,  0],
       [10,  0],
       [ 0,  1],
       [ 1,  1]
       ...
9. 取出 np 矩陣中包含的每類數(shù)字各一個(gè) np.unique

Returns the sorted unique elements of an array.

y = np.hstack((np.array([1] * 10), np.array([0] * 10)))
print(y)
print(np.unique(y))
[1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0]
[0 1
8. 將 np 矩陣每一列 feature 都正則化到 [0, 1]
import numpy as np

a = np.arange(1, 16).reshape(3, 5).T.astype('float32')
print(a)

# 將每一列數(shù)據(jù) 都標(biāo)準(zhǔn)化到 標(biāo)準(zhǔn)正態(tài)分布 N~(0,1)
avgs = np.mean(a, axis=0)
stds = np.std(a, axis=0)
print(avgs)
print(stds)

for i in range(a.shape[1]):
    a[:, i] = (a[:, i] - avgs[i]) / stds[i]
print(a)
print(np.mean(a, axis=0))
print(np.std(a, axis=0))
[[ 1.  6. 11.]
 [ 2.  7. 12.]
 [ 3.  8. 13.]
 [ 4.  9. 14.]
 [ 5. 10. 15.]]
[ 3.  8. 13.]  #  正則化前的 mean
[1.4142135 1.4142135 1.4142135]  # 正則化前的 std

[[-1.4142135  -1.4142135  -1.4142135 ]
 [-0.70710677 -0.70710677 -0.70710677]
 [ 0.          0.          0.        ]
 [ 0.70710677  0.70710677  0.70710677]
 [ 1.4142135   1.4142135   1.4142135 ]]
[2.3841858e-08 2.3841858e-08 2.3841858e-08]  # 正則化后的 mean -> 0
[0.99999994 0.99999994 0.99999994]  # 正則化后的 std -> 1

使用 sklearn 庫函數(shù)進(jìn)行驗(yàn)證

from sklearn import preprocessing

b = preprocessing.scale(a)
print(b)
print(np.mean(b, axis=0))
print(np.std(b, axis=0))
[[-1.4142137e+00 -1.4142137e+00 -1.4142137e+00]
 [-7.0710683e-01 -7.0710683e-01 -7.0710683e-01]
 [-4.7683720e-08 -4.7683720e-08 -4.7683720e-08]
 [ 7.0710683e-01  7.0710683e-01  7.0710683e-01]
 [ 1.4142137e+00  1.4142137e+00  1.4142137e+00]]
[0. 0. 0.]
[1. 1. 1.]
7. 統(tǒng)計(jì)數(shù)據(jù)中滿足某個(gè)條件的數(shù)的個(gè)數(shù)酗电,并將其索引輸出
a = np.arange(1, 16).reshape((3, 5))
print(a)
b = np.where(a % 2 == 0)
print(b)
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]]
(array([0, 0, 1, 1, 1, 2, 2], dtype=int64), array([1, 3, 0, 2, 4, 1, 3], dtype=int64))

可以看到 np.where 返回的結(jié)果中,

  • 第1個(gè)array表示滿足條件的數(shù)字的行號(hào)
  • 第2個(gè)array表示滿足條件的數(shù)字的列號(hào)

高維矩陣依次類推内列,可以得到任意維矩陣找出滿足條件下標(biāo)的一般算法撵术。

6. 輸出一個(gè)范圍內(nèi)所有整數(shù)的隨機(jī)序列 np.random.permutation

可用于隨機(jī)輸出樣本

a = np.random.permutation(20)
print(a)
[ 0  4  9  1  8  3 16 12 10  6 14 17 19  7  5 18 13 11  2 15]

取一個(gè)范圍內(nèi) k 個(gè)不同的隨機(jī)數(shù)

k = 10
a = np.random.permutation(500)[:k]
print(a)
[ 54 324 236 138 150 492 452 154 113 198]
5. 模擬 sigmoid 函數(shù)

將 numpy 矩陣中滿足 某一個(gè)條件,比如 >=0.5 的值置為 1话瞧,剩下的置為 0

a = np.random.rand(10)
print(a)

a[a >= 0.5] = 1  # 根據(jù) a<=0.5 返回的 bool 矩陣設(shè)置值
a[a < 0.5] = 0

print(a)
[0.21568784 0.46072737 0.06695012 0.84071791 0.99760723]
[0. 0. 0. 1. 1.]
4. 找出 np 矩陣中符合特定條件元素的下標(biāo) np.where
3. 從 numpy 矩陣中 隨機(jī)選一個(gè)數(shù)字出來 np.random.choice

np.random.choice 的其他用法

a = np.random.randn(10)
print(a)

b = np.where(a > 0)[0]  # where的結(jié)果是tuple嫩与,取[0]得到ndarray
print(b)

c = np.random.choice(b)  # 隨機(jī)選擇一個(gè)數(shù)字
print(c)
[-0.85561201  0.40785476 -1.304088   -1.3028974  -1.08861778 -0.02982628
  0.01579852  0.01123383  1.51217716  0.95912397]
[1 6 7 8 9]
7
2. numpy 矩陣求逆 np.linalg.inv,求偽逆矩np.linalg.pinv
a = np.random.rand(30).reshape((3, 10))
b = np.linalg.inv(np.matmul(a, a.T))  # (3,10) * (10,3)
print(b)
[[ 1.67361673 -0.69118592 -0.90882621]
 [-0.69118592  0.88792992  0.00396744]
 [-0.90882621  0.00396744  1.12034553]]
1. numpy 得到一個(gè)這樣的矩陣變換
import numpy as np

a = np.ones((1, 5))
X = np.vstack((a, 2 * a))
X = np.vstack((X, 3 * a))
print(X)

X_t = np.vstack((X, X[1] * X[2]))
X_t = np.vstack((X_t, X[1] * X[1]))
X_t = np.vstack((X_t, X[2] * X[2]))
print(X_t)
[[1. 1. 1. 1. 1.]
 [2. 2. 2. 2. 2.]
 [3. 3. 3. 3. 3.]]
[[1. 1. 1. 1. 1.]
 [2. 2. 2. 2. 2.]
 [3. 3. 3. 3. 3.]
 [6. 6. 6. 6. 6.]
 [4. 4. 4. 4. 4.]
 [9. 9. 9. 9. 9.]]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末交排,一起剝皮案震驚了整個(gè)濱河市划滋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌埃篓,老刑警劉巖处坪,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異架专,居然都是意外死亡同窘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門部脚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來想邦,“玉大人,你說我怎么就攤上這事委刘∩ッ唬” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵锡移,是天一觀的道長(zhǎng)呕童。 經(jīng)常有香客問我,道長(zhǎng)罩抗,這世上最難降的妖魔是什么拉庵? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮套蒂,結(jié)果婚禮上钞支,老公的妹妹穿的比我還像新娘。我一直安慰自己操刀,他們只是感情好烁挟,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著骨坑,像睡著了一般撼嗓。 火紅的嫁衣襯著肌膚如雪柬采。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天且警,我揣著相機(jī)與錄音粉捻,去河邊找鬼。 笑死斑芜,一個(gè)胖子當(dāng)著我的面吹牛肩刃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杏头,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼盈包,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了醇王?” 一聲冷哼從身側(cè)響起呢燥,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寓娩,沒想到半個(gè)月后叛氨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡根暑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年力试,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片排嫌。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畸裳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淳地,到底是詐尸還是另有隱情怖糊,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布颇象,位于F島的核電站伍伤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏遣钳。R本人自食惡果不足惜扰魂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蕴茴。 院中可真熱鬧劝评,春花似錦、人聲如沸倦淀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撞叽。三九已至姻成,卻和暖如春插龄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背科展。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工均牢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辛润。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓膨处,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親砂竖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • numpy.random.randint Return random integers fromlow(inclu...
    onepedalo閱讀 1,190評(píng)論 0 1
  • 1. numpy簡(jiǎn)單介紹 numpy 是采用c語言編寫鹃答,相對(duì)python自帶的list數(shù)組,好處是采用的矩陣運(yùn)算乎澄,...
    淘碼小工閱讀 1,233評(píng)論 0 1
  • numpy的基本屬性,基于矩陣的運(yùn)算 最簡(jiǎn)答的初始化: 創(chuàng)建array np.array([], dtype=n...
    賈磊_cd閱讀 360評(píng)論 0 0
  • numpy數(shù)組不可以擴(kuò)展 可是它最大的缺點(diǎn)就是不可動(dòng)態(tài)擴(kuò)展——“NumPy的數(shù)組沒有這種動(dòng)態(tài)改變大小的功能测摔,num...
    hzyido閱讀 3,304評(píng)論 0 2
  • Jupyter 啟動(dòng) jupyter notebook magic methed jupyter notebook...
    入間閱讀 480評(píng)論 0 1