数据分析_Python学习08之Numpy学习

1. Numpy的Ndarray对象

Ndarray:①N维数组对象 ②同一系列数据的集合 ③存放同类元素的多维数组

1.1.创建一维数组
法1.直接传入列表

import numpy as np

list1 = [1, 2, 3]
oneArray = np.array(list1)
print(type(oneArray))  # <class 'numpy.ndarray'>
print(oneArray)  # [1 2 3]

法2.传入range生成序列

# 方法2 传入range生成序列
oneArray1 = np.array(range(1, 7))
print(type(oneArray1))  # <class 'numpy.ndarray'>
print(oneArray1)  # [1 2 3 4 5 6]

法3.使用numpy自带的np.arange()生成数组

# 方法3 使用numpy自带的np.arange()生成数组
oneArray2 = np.arange(0, 8, 2)
print(type(oneArray2))  # <class 'numpy.ndarray'>
print(oneArray2)  # [0 2 4 6]

1.2.创建二维数组

# 生成二维数组
list2 = [[1, 2], [3, 4], [5, 6]]
twoArray = np.array(list2)
print(twoArray)

在这里插入图片描述
1.3.常用的属性

# 1.获取维度
print(twoArray.ndim)  # 2

# 2.形状(行,列)
print(twoArray.shape)  # (3, 2)

# 3.元素个数
print(twoArray.size)  # 6

1.4.调整数组的形状

# 调整数组的形状
"""
注意:转换前后数组中的元素个数要相等,否则会报错
"""
list3 = [[1, 2], [3, 4], [5, 6]]
a1 = np.array(list3)
print(a1)
print(a1.shape)     # (3, 2)

# 1.修改原有的数组
a1.shape = (2, 3)
print(a1)

# 2.返回一个新的数组,不影响原来的数组
a2 = a1.reshape(2, 3)
print(a2)

# 3.将多维变成一维
a3 = a1.flatten(order='C')
a4 = a1.flatten(order='F')
print(a3)       # [1 2 3 4 5 6]
print(a4)       # [1 4 2 5 3 6]

# 将一维转换为多维
t1 = np.arange(24)
print(t1)

t2 = t1.reshape((4, 6))
print(t2)

# t3 = t1.reshape((2, 3, 4))
# print(t3)

1.5.将数组转为list

# 将数组转为list
arr1 = np.array([1, 2, 3, 4, 5, 6])
list_arr1 = arr1.tolist()
print(arr1)                 # [1 2 3 4 5 6]
print(list_arr1)            # [1, 2, 3, 4, 5, 6]

2. 数组的计算
2.1. 数组和数的计算

# 1. 数组和数的计算
x1 = np.arange(0, 6)
print(x1)
print(x1 + 2)
print(x1 * 2)

2.2.数组和数组的计算(对应位置做计算,不同于数学中的矩阵)

# 2.数组和数组的计算(对应位置做计算,不同于数学中的矩阵)
y1 = np.arange(24).reshape((4, 6))
y2 = np.arange(24).reshape((4, 6))
print(y1)
print(y2)
print(y1 + y2)
print(y1 * y2)

*注意:不同形状的 多维数组 不能计算,例如:

z1 = np.arange(24).reshape((4, 6))
z2 = np.arange(30).reshape((3, 10))

但是,行数或列数相同的 一维数组 和 多维数组 可以进行计算
行数相同 或 列数相同
如下列栗子:

c1 = np.arange(24).reshape(4, 6)
c1 = np.arange(0, 6)

c2 = np.arange(24).reshape(4, 6)
c2 = np.arange(4).reshape(4, 1)

3.数组中的轴

g1 = np.arange(6).reshape(2, 3)
print(g1)
print(np.sum(g1, axis=0))       # [3 5 7]
print(np.sum(g1, axis=1))       # [ 3 12]
print(np.sum(g1))               # 15

4.数组的索引和切片
4.1.一维数组的索引和切片

q1 = np.arange(10)
print(q1)

# 冒号分隔切片参数 start:stop:step 来进行切片
print(q1[2:7:2])

# 只放置一个参数,将返回与该参数相对应的单个元素
print(q1[2])

# 如果为[2:],表示从该索引开始以后的所有项都将被提取
print(q1[2:])

4.2.多维数组的索引和切片

总结: 数组[行(可以使用切片) , 列(可以使用切片)]

q2 = np.arange(24).reshape(4, 6)
print(q2)

# 取一行
print(q2[1])
print(q2[1,:])

# 取连续的多行
print(q2[1:])
print(q2[1:3,:])

# 取不连续的多行
print(q2[[0,2,3]])
print(q2[[0,2,3],:])

# 取一列
print(q2[:,1])

# 取连续的多列
print(q2[:,1:])

# 取不利连续的多列
print(q2[:,[0,2,3]])

# 取一个值,例如:3行4列
print(q2[3,4])

# 取多个不连续的值(行和列取的数相对应,相当于取的是(0,0),(1,1)(1,3))
print(q2[[0,1,1],[0,1,3]])

5.数组中数值的修改

b = np.arange(24).reshape(4, 6)
print(b)

# 修改某一行的值
b[1, :] = 0
print(b)

# 修改某一列的值
b[:, 1] = 0
print(b)

# 修改连续多行
b[2:, :] = 999
print(b)

# 修改连续多列
b[:, 4:] = 1000
print(b)

# 修改多行多列,取第二行到第四行,第三列到底五列
b[1:4, 2:5] = 22
print(b)

# 修改多个不相邻的点
b[[0, 1], [0, 3]] = 33
print(b)

# 可以根据条件修改,比如小于22的修改掉
b[b < 22] = 0
print(b)

# 使用逻辑判断
b[(b > 22) & (b < 1000)] = 0
print(b)

"""
逻辑运算:
        与 &
        或 |
        非 ~
"""

# 拓展:三木运算
height = np.array([[160, 183], [158, 169], [167, 190]])
result_height = np.where(height > 180, '高', '矮')
print(result_height)

6.数组的添加、删除和去重
7.numpy的计算

import numpy as np

# 获取所有数据的最大值
score = np.arange(24).reshape(4, 6)
print(score)
result_max = np.max(score)
print(result_max)

# 获取某一个轴上的数据最大值
result_max_0 = np.max(score, axis=0)
result_max_1 = np.max(score, axis=1)
print(result_max_0)
print(result_max_1)

# 获取某一个轴上的数据最小值
result_min_0 = np.min(score, axis=0)
result_min_1 = np.min(score, axis=1)
print(result_min_0)
print(result_min_1)

# 获取平均值
result_avg = np.mean(score)
result_avg_0 = np.mean(score, axis=0)
print(result_avg)
print(result_avg_0)

# 求和
sum = np.sum(score, axis=0)
print(sum)

8.数组中的nan和inf

nan:表示缺失的数据
inf:表示无穷大,需要使用float(‘inf’)来转化。另:-inf表示无穷小

1.np.nan != np.nan 结果是True
2.可以使用np.count_nozero() 来判断非0的个数
以nan为例,下面是nan的一个例子:

import numpy as np

t = np.arange(24).reshape(4, 6).astype(float)
t[2, 3:] = np.nan
print(t)

# 遍历数组的每一列
for i in range(t.shape[1]):

    # 获取当前列
    temp_col = t[:, i]

    # 判断当前列是否包含nan数据
    nonzero_num = np.count_nonzero(temp_col != temp_col)

    # 条件成立,说明有这一列有nan
    if nonzero_num != 0:

        # 获取当前列中不是nan的数据
        temp_col_not_nan = temp_col[temp_col == temp_col]

        # 将nan替换为这一列的avg值
        temp_col[np.isnan(temp_col)] = np.mean(temp_col_not_nan)

print(t)

9.二维数组的转置

t2 = np.arange(12).reshape(3, 4)
# 转置
t3 = t2.T
print(t2)
print(t3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值