记录numpy中的一些数据处理的方法.
1
2
3
4
5
6
7
8
| import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']
|
A. 如果我们想要去取第一列,第二列,和最后一列(label), 可以使用如下的方式:
1
| data = np.array(df.iloc[:100, [0, 1, -1]])
|
df.shape
是 (150, 5)
, data.shape
是 (100, 3)
data
现在是lists in list
的一个ndarray
B. 如果我们想要去取data
的每行的前两列, 还有最后一列,可以使用如下的方式:
1
| X, y = data[:, :-1], data[:, -1]
|
X, y
都是 ndarray. x.shape
是 (100, 2)
, y.shape
是 (100,)
C. 如果要对标签进行二分类,我们可以使用 python 的 list comprehension:
1
| y = np.array([1 if i == 1 else -1 for i in y])
|
这样处理了之后,y 的 shape 还是跟之前是一样的.
- 如果我们又一个ndarray,
an_ndarray = np.array([[11,12,13,14], [21,22,23,24], [31,32,33,34]])
row_rank1 = an_array[1, :]
和 row_rank2 = an_array[1:2, :]
将会给出不同的结果,可以输出来看看有啥不同, 这个很重要.
- 我们也可以使用如下的方式,对array中的元素进行判断
1
2
3
| an_ndarray = np.array([[11,12], [21, 22], [31, 31]])
bigger_than_fifteen = (an_array > 15)
an_ndarray[bigger_than_fifteen]
|
或者我们也可以直接如下操作:
1
| an_ndarray[(an_ndarray > 15)]
|
- 下面是针对上面的
an_ndarray
进行的一些数学操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| # 求各个元素的均值
an_ndarray.mean()
# 求每行的均值
an_ndarray.mean(axis=1)
# 求每列的均值
an_ndarray.mean(axis=0)
# 求所有元素的和
an_ndarray.sum()
# 求每行的中位数
np.median(an_ndarray, axix=1)
# 求每列的中位数
np.median(an_ndarray, axix=0)
# 想要找到unique的元素
np.unique(an_ndarray)
# 下面是一些集合的操作
s1 = np.array(['desk','chair','bulb'])
s2 = np.array(['lamp','bulb','chair'])
(s1, s2)
# s1 和 s2 交集
np.intersect1d(s1, s2)
# s1 和 s2 去重并集
np.union1d(s1, s2)
# 在s1然后不在s2中的元素
np.setdiff1d(s1, s2)
# 判断s1中的元素是不是在s2中
np.in1d(s1, s2)
|
-
广播
最好的操作方式是能打印出来看看长啥样.
-
文件的存取
1
2
3
4
5
6
| x = np.array([ 23.23, 24.24])
np.save('an_array', x)
np.load('an_array.npy')
np.savetxt('array.txt', X=x, delimiter=',')
np.loadtxt('array.txt', delimiter=',')
|
1
2
3
4
5
6
7
8
9
10
| K = np.random.randint(low=2,high=50,size=(2,2))
M = np.random.randint(low=2,high=50,size=(2,2))
np.vstack((K,M))
np.hstack((K,M))
np.concatenate([K, M], axis = 0)
np.concatenate([K, M.T], axis = 1)
# vstack 和 hstack 和 最下面的两种方式是等价的
|