np.mgrid

1
2
3
4
5
6
7
8
9
>>> x, y = np.mgrid[0:3,0:3]
>>> x
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2]])
>>> y
array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])

np.meshgrid

1
2
3
4
5
6
7
8
9
>>> a,b=np.meshgrid(range(3),range(3))
>>> a
array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])
>>> b
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2]])

np.ceil()

返回x的值上限 - 不小于x的最小整数

1
2
3
>>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
>>> np.ceil(a)
array([-1., -1., -0., 1., 2., 2., 2.])

np.ravel() np.flatten()

两者所要实现的功能是一致的(将多维数组降位一维)。

两者的区别在于返回拷贝(copy)还是返回视图(view)

numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵

而numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。

1
2
3
4
5
6
7
8
In [14]: x=np.array([[1,2],[3,4]])

# flattenh函数和ravel函数在降维时默认是行序优先
In [15]: x.flatten()
Out[15]: array([1, 2, 3, 4])

In [17]: x.ravel()
Out[17]: array([1, 2, 3, 4])
1
2
3
4
5
6
7
8
9
>>> x = np.array([[1, 2], [3, 4]])
>>> x.flatten()[1] = 100
>>> x
array([[1, 2],
[3, 4]])
>>> x.ravel()[1] = 100
>>> x
array([[ 1, 100],
[ 3, 4]])

通过上面的程序可以发现flatten函数返回的是拷贝。

np.stack()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np
a=[[1,2,3],
[4,5,6]]
print("列表a如下:")
print(a)

print("增加一维,新维度的下标为0")
c=np.stack(a,axis=0)
print(c)

print("增加一维,新维度的下标为1")
c=np.stack(a,axis=1)
print(c)

输出:
列表a如下:
[[1, 2, 3], [4, 5, 6]]
增加一维,新维度下标为0
[[1 2 3]
[4 5 6]]
增加一维,新维度下标为1
[[1 4]
[2 5]
[3 6]]

np.get_dummies()

一种常用于统计建模或机器学习的转换方式是:将分类变量(categorical variable)转换为“哑变量矩阵”(dummy matrix)或“指标矩阵”(indicator matrix)。如果DataFrame的某一列中含有k个不同的值,则可以派生出一个k列矩阵或DataFrame(其值全为1和0)。pandas有一个get_dummies函数可以实现该功能(其实自己动手做一个也不难)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
In [72]: df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'],
....: 'data1': range(6)})

In [73]: pd.get_dummies(df['key'])
Out[73]:
a b c
0 0 1 0
1 0 1 0
2 1 0 0
3 0 0 1
4 1 0 0
5 0 1 0

[6 rows x 3 columns]

np.expand_dims()

numpy.expand_dims(a, axis)

增加一个维度,例如:np.expand_dims(image_data, 0) 可用于增加 batch 的维度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>>> x = np.array([1,2])
>>> x.shape
(2,)

>>> y = np.expand_dims(x, axis=0)
>>> y
array([[1, 2]])
>>> y.shape
(1, 2)

>>> y = np.expand_dims(x, axis=1) # Equivalent to x[:,newaxis]
>>> y
array([[1],
[2]])
>>> y.shape
(2, 1)

>>> a.shape
(3, 3)
>>> np.expand_dims(a,-1).shape
(3, 3, 1)

np.newaxis

ravel()