【机器学习】numpy+pandas刷题

numpy

*8:*创建二维等差数组:np.arange(6).reshape(2, 3)
9: 创建单位矩阵(二维数组):np.eye(3)
21:矩阵乘法运算np.mat(A) * np.mat(B)
52:使用数字 0 将一个全为 1 的 5x5 二维数组包围:

  Z = np.ones((5, 5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
Z

59: 使用五种不同的方法去提取一个随机数组的整数部分:

Z = np.random.uniform(0, 10, 10)
print("原始值: ", Z)

print("方法 1: ", Z - Z % 1)
print("方法 2: ", np.floor(Z))
print("方法 3: ", np.ceil(Z)-1)
print("方法 4: ", Z.astype(int))
print("方法 5: ", np.trunc(Z))

63:创建一个长度为 5 的一维数组,并将其中最大值替换成 0:

Z = np.random.random(5)
print("原数组: ", Z)
a
a=np.random.random(5)
print(a)
a[a.argmax()]=0
a
  1. 从随机一维数组中找出距离给定数值(0.5)最近的数:
Z = np.random.uniform(0, 1, 20)
print("随机数组: \n", Z)
z = 0.5
m = Z.flat[np.abs(Z - z).argmin()]

m
  1. 找出随机一维数组中出现频率最高的值:
Z = np.random.randint(0, 10, 50)
print("随机一维数组:", Z)
np.bincount(Z).argmax()
随机一维数组: [0 8 7 1 2 6 2 2 8 7 9 7 5 9 7 3 9 7 6 5 7 4 4 9 1 5 5 6 1 1 9 9 6 9 1 1 5
 2 6 5 6 4 8 6 2 2 1 5 6 1]
1
  1. 对于给定的 5x5 二维数组,在其内部随机放置 p 个值为 1 的数:
p = 3

Z = np.zeros((5, 5))
np.put(Z, np.random.choice(range(5*5), p, replace=False), 1)

Z
array([[0., 0., 0., 0., 1.],
       [0., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.]])
  1. 对于随机的 3x3 二维数组,减去数组每一行的平均值:
X = np.random.rand(3, 3)
print(X)

Y = X - X.mean(axis=1, keepdims=True)
Y
copy
[[0.94481763 0.71885257 0.64564054]
 [0.26427321 0.44115571 0.80828852]
 [0.6223677  0.94623723 0.14231897]]
array([[ 0.17504738, -0.05091768, -0.12412971],
       [-0.24029927, -0.06341677,  0.30371604],
       [ 0.05205973,  0.37592927, -0.427989  ]])
  1. 对于二维随机数组中各元素,保留其 2 位小数:
Z = np.random.random((5, 5))
print(Z)

np.set_printoptions(precision=2)
Z
  1. 打印复数的实部和虚部:
a = np.array([1 + 2j, 3 + 4j, 5 + 6j])

print("实部:", a.real)
print("虚部:", a.imag)
copy
实部: [1. 3. 5.]
虚部: [2. 4. 6.]
  1. 求解给出矩阵的逆矩阵并验证:
matrix = np.array([[1., 2.], [3., 4.]])
inverse_matrix = np.linalg.inv(matrix)

# 验证原矩阵和逆矩阵的点积是否为单位矩阵
assert np.allclose(np.dot(matrix, inverse_matrix), np.eye(2))
inverse_matrix
copy
array([[-2. ,  1. ],
       [ 1.5, -0.5]])

pandas

  1. 根据 DataFrame 的下标值进行更改。:

修改第 2 行与第 2 列对应的值 3.0 → 2.0

df3.iat[1, 1] = 2  # 索引序号从 0 开始,这里为 1, 1
df3
  1. 删除存在缺失值的行:
df5 = df3.copy()
print(df5)
df5.dropna(how='any')  # 任何存在 NaN 的行都将被删除

46:DataFrame 按指定列对齐:

left = pd.DataFrame({'key': ['foo1', 'foo2'], 'one': [1, 2]})
right = pd.DataFrame({'key': ['foo2', 'foo3'], 'two': [4, 5]})

print(left)
print(right)

按照 key 列对齐连接,只存在 foo2 相同,所以最后变成一行
pd.merge(left, right, on='key')
copy
    key  one
0  foo1    1
1  foo2    2
    key  two
0  foo2    4
1  foo3    5

pandas的作用如下:
1:文件操作
2:时间序列
3:多重索引

  1. 建立一个以 2018 年每一天为索引,值为随机数的 Series:
dti = pd.date_range(start='2018-01-01', end='2018-12-31', freq='D')
s = pd.Series(np.random.rand(len(dti)), index=dti)
s

```python
2018-01-01    0.991481
2018-01-02    0.988274
2018-01-03    0.013988
2018-01-04    0.143980
2018-01-05    0.951515
                ...   
2018-12-27    0.994144
2018-12-28    0.892863
2018-12-29    0.005812
2018-12-30    0.307693
2018-12-31    0.768305
  1. DataFrame 按关键字查询:
df3[df3['animal'].isin(['cat', 'dog'])]
  1. DataFrame 按标签及列名查询。:
df.loc[df2.index[[3, 4, 8]], ['animal', 'age']]

**72.DataFrame 多值替换:

将 priority 列的 yes 值替换为 True,no 值替换为 False。

df['priority'].map({'yes': True, 'no': False})
copy
a     True
b     True
c    False
d     True
e    False
f    False
g    False
h     True
i    False
j    False
Name: priority, dtype: bool
**
  1. DataFrame 分组,并得到每一组中最大三个数之和:
df = pd.DataFrame({'A': list('aaabbcaabcccbbc'),
                   'B': [12, 345, 3, 1, 45, 14, 4, 52, 54, 23, 235, 21, 57, 3, 87]})
print(df)
df.groupby('A')['B'].nlargest(3).sum(level=0)
copy
    A    B
0   a   12
1   a  345
2   a    3
3   b    1
4   b   45
5   c   14
6   a    4
7   a   52
8   b   54
9   c   23
10  c  235
11  c   21
12  b   57
13  b    3
14  c   87





A
a    409
b    156
c    345
Name: B, dtype: int64

你可能感兴趣的:(Python,机器学习)