python之numpy模块

什么是numpy?

快速, 方便的科学计算基础库(主要时数值的计算, 多维数组的运算)
导入:

import numpy as np
numpy创建数组?
一维数组

方法1:np.array()

print(np.array([1,2,3,4,5]))
# [1 2 3 4 5]
print(np.array(range(1,6)))
# [1 2 3 4 5]

方法2:np.arange()

print(np.arange(1,6))
# [1 2 3 4 5]
二维数组
data = np.arange(12).reshape((3, 4))
print(data)
# [[ 0  1  2  3]
  [ 4  5  6  7] 
  [ 8  9 10 11]]
数组的类名
c = np.array(range(1,6))
print(type(c))
# <class 'numpy.ndarray'>
查看数据元素的类型
print(c1.dtype)
# int32
修改数组的数据类型
print(c1.astype('float'))
# [1. 2. 3. 4. 5.]
print(c1.astype('bool'))
# [ True  True  True  True  True]
print(c1.astype('?'))  # ?是bool类型的代号;
# [ True  True  True  True  True]
创建的时候指定数据类型
print(np.array([1,2,3,4], dtype=np.float))
# [1. 2. 3. 4.]
修改浮点数的小数位数
c3 = np.array([1.234556, 3.45464456, 5.645657567])
print(np.round(c3, 2))
# [1.23 3.45 5.65]
numpy读取csv格式数据
import numpy as np

fname = "doc/eg6-a-student-data.txt"
dtype = np.dtype([('gender', '|S1'), ('height', 'f2')])
# fname: 文件的名称, 可以是文件名, 也可以是ugz或者bz2的压缩文件;
# dtype: 数据类型, 可选, 默认是float;
# delimiter: 分隔符字符串, 默认情况是任何的空格,
# skiprows: 跳过前xx行, 一般情况跳过第一行;
#  usecols: 读取指定的列, 可以是元组;
# unpack: 如果为True, 对返回的数组对象转置;
data = np.loadtxt(fname=fname, dtype=dtype, skiprows=9, usecols=(1, 3))
print(data)
# [(b'M', 1.82) (b'M', 1.77) (b'F', 1.68) (b'M', 1.72) (b'F', 1.78)
 (b'F', 1.6 ) (b'M', 1.72) (b'M', 1.83) (b'F', 1.56) (b'F', 1.64)
 (b'M', 1.63) (b'M', 1.67) (b'M', 1.66) (b'F', 1.59) (b'F', 1.7 )
 (b'M', 1.97) (b'F', 1.66) (b'F', 1.63) (b'M', 1.69)]
numpy数组的转置
import numpy as np
data = np.arange(12).reshape((3, 4))
print(data)
# [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
# 1).
print(data.transpose())
# [[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]
# 2). 0轴 , 1 轴
print(data.swapaxes(1, 0))
# [[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]
# 3).
print(data.T)
# [[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]
numpy对数组的索引和切片
import numpy as np

# 将一维数组转换为3行4列的二维数组
data = np.arange(12).reshape((3, 4))
print(data)
# [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

# 取第一行的数据
print(data[0])
# [0 1 2 3]

#  取第一列的数据
print(data.T[0])
# [0 4 8]
print(data[:, 0])
# [0 4 8]

# 获取多行
print(data[:2])
# [[0 1 2 3]
 [4 5 6 7]]

# 获取多列
print(data.T[:2])
# [[0 4 8]
 [1 5 9]]
print(data[:, :2])
# [[0 1]
 [4 5]
 [8 9]]


# 获取指定行的前几列;
print(data)
# [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
print(data[[0,2], :2]) # 获取第0行和第2行的前两列
# [[0 1]
 [8 9]]
print(data[:2, [0,2]]) # 获取前两行的第0列和第2列
# [[0 2]
 [4 6]]
numpy中数值的修改

data中所有大于8的数字都替换为0

import numpy as np

data = np.arange(12).reshape((3, 4))
print(data)
# [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

print(data>8) # 返回一个三行四列的数组, 存储的是Bool值
# [[False False False False]
 [False False False False]
 [False  True  True  True]]

data[data>8] = 0 # 布尔索引: 复杂的条件: data中所有大于8的数字都替换为0;
print(data)
# [[0 1 2 3]
 [4 5 6 7]
 [8 0 0 0]]

data中所有大于8的数字都替换为0, 否则替换为1

print(np.where(data <= 8, 1, 0))
# [[1 1 1 1]
 [1 1 1 1]
 [1 0 0 0]]

如果data<=8, 替换称8, 如果data>=10, 替换为10

print(data.clip(8, 10))
# [[ 8  8  8  8]
 [ 8  8  8  8]
 [ 8  9 10 10]]
数组的拼接
t1 = np.arange(12).reshape(2, 6)
t2 = np.arange(12).reshape(2, 6)
t3 = np.arange(12).reshape(2, 6)

# 竖直拼接(vertically)
print(np.vstack((t1, t2, t3)))
# [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
# 水平拼接(horizontally)
print(np.hstack((t1, t2, t3)))
# [[ 0  1  2  3  4  5  0  1  2  3  4  5  0  1  2  3  4  5]
 [ 6  7  8  9 10 11  6  7  8  9 10 11  6  7  8  9 10 11]]
数组的行列交换
t4 = np.arange(12).reshape(2, 6)

# 行交换(第一行和第二行进行交换)
print("原数据:\n", t4)
# 原数据:
 [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
 
t4[[0, 1], :] = t4[[1, 0], :]
print("替换后的数据:\n", t4)
# 替换后的数据:
 [[ 6  7  8  9 10 11]
 [ 0  1  2  3  4  5]]
 
# 列交换(第3列和第5列进行交换)
print("原数据:\n", t4)
# 原数据:
 [[ 6  7  8  9 10 11]
 [ 0  1  2  3  4  5]]
 
t4[:, [2, 4]] = t4[:, [4, 2]]
print("替换后的数据:\n", t4)
# 替换后的数据:
 [[ 6  7 10  9  8 11]
 [ 0  1  4  3  2  5]]
numpy中的常用方法
1. 获取最大值和最小值的位置
# 获取当前数组里面最大值的索引;
max_item1 = np.argmax(data)
print(max_item1)
# 11

# 获取每一列的最大值对应的索引;
print(np.argmax(data, axis=0))
# [2 2 2 2]

# 获取每一行的最大值对应的索引;
print(np.argmax(data, axis=1))
# [3 3 3]
2. 创建一个全为0的数组
print(np.zeros((3, 3), dtype=np.int))
# [[0 0 0]
 [0 0 0]
 [0 0 0]]
3. 创建一个全为1的数组
print(np.ones((3, 4)))
# [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
4. 创建一个对角线全为1的正方形数组
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
numpy中的nan和inf
nan(not a number): 表示不是一个数字, 代表的是数据缺失
inf(infinity): inf代表正无穷, -inf代表负无穷


# nan的特殊属性:
    - 两个nan的值是不相等的, 是float类型:
    >>> np.nan == np.nan
    False

    >>> np.nan != np.nan
    True

    - 如何判断有多少个缺失值:

        data = np.arange(12, dtype=np.float).reshape(3, 4)
        data
        array([[ 0.,  1.,  2.,  3.],
               [ 4.,  5.,  6.,  7.],
               [ 8.,  9., 10., 11.]])
        data[:2, 2] = np.nan
        data
        array([[ 0.,  1., nan,  3.],
               [ 4.,  5., nan,  7.],
               [ 8.,  9., 10., 11.]])
        np.count_nonzero(data!=data)
        2
        data!=data
        array([[False, False,  True, False],
               [False, False,  True, False],
               [False, False, False, False]])

        # 判断data里面的缺失值
        np.isnan(data)
        array([[False, False,  True, False],
               [False, False,  True, False],
               [False, False, False, False]])

        np.count_nonzero(np.isnan(data))
        2



    data[np.isnan(data)]=0

numpy的常用统计函数
import numpy as np
data = np.arange(12, dtype=np.float).reshape(3, 4)
print(data)
# [[ 0.  1.  2.  3.]
 [ 4.  5.  6.  7.]
 [ 8.  9. 10. 11.]]

print(data.sum())
# 66.0

# 每一列数据的和;
print(data.sum(axis=0))
# [12. 15. 18. 21.]

# 每一行数据的和;
print(data.sum(axis=1))
# [ 6. 22. 38.]


# - 均值

print(data.mean())
# 5.5

print(data.mean(axis=0))
# [4. 5. 6. 7.]

print(data.mean(axis=1))
# [1.5 5.5 9.5]


# - 中值

print(np.median(data))
print(np.median(data, axis=0))
print(np.median(data, axis=1))


# - 最大值
print(data.max())
# 11.0

print(data.max(axis=0))
# [ 8.  9. 10. 11.]

print(data.max(axis=1))
# [ 3.  7. 11.]


# - 极差
print(np.ptp(data))
# 11.0

print(np.ptp(data, axis=0))
# [8. 8. 8. 8.]

print(np.ptp(data, axis=1))
# [3. 3. 3.]

# - 标准差: 代表的是数据的波动稳定情况, 数字越大, 越不稳定;
print(data.std())
# 3.452052529534663

print(data.std(axis=0))
# [3.26598632 3.26598632 3.26598632 3.26598632]

print(data.std(axis=1))
# [1.11803399 1.11803399 1.11803399]
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值