python数据分析课程笔记 | 第二章 Numpy运用(上)

本文详细介绍了numpy的基本用法,包括数组创建、属性、索引切片,以及高级用法如形状变换、广播机制、排序搜索。通过实例演示了如何创建数组、进行数值运算、调整数组形状和利用ufunc进行高效计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1 numpy基本用法

(1)数组创建和属性

import numpy as np

# 数组创建
arr1 = np.array([-9, 7, 4, 3])
arr2 = np.array([-9, 7, 4, 3], dtype='float')
arr3 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# 等差数列
np.arange(0, 10, 0.5)
a = np.linspace(1, 10, 10)
b = np.linspace(1, 10, 10, endpoint=False)
# 等比数列
np.logspace(1, 5, base=2, num=10)  # 2 ** np.linspace(1,5,10)
# 全零矩阵
np.zeros([4, 5])
# 单位矩阵
np.eye(6)
# 对角矩阵
np.diag([4, 5, 8])
# 属性
arr3.shape
arr3.ndim
arr3.size
arr3.dtype

(2)索引和切片

在这里插入图片描述

import numpy as np

# 普通索引
arr = np.arange(1, 10)
arr_change = arr
arr_change = arr.copy()

data = ((8.5, 6.4, 1.2), (1.5, 3, 4.7), (11, 13.4, 8))
arr2 = np.array(data)

a = arr2 > 3.5
b = arr2[arr2 > 3.5]
print(a, b)
c = arr2[~(arr2 > 3.5)]
d = (arr2 > 3.5) & (arr2 < 10)

# 花式索引(花式索引跟切片不一样,总是将数据复制到新的数组中)
arr2[[2, 1]]
# 返回数组元素(3,0)、(0,1)
arr2[[2, 2], [0, 1]]
# 如果要得到矩形区域
arr2[[0, -1]][:, [0, 1, 2]]
arr2[np.ix_([0, -1], [0, 1, 2])]

2.2 numpy高级用法

(1)数组形状改变

在这里插入图片描述
在这里插入图片描述

import numpy as np

data = ((8.5, 6.4, 1.2), (1.5, 3, 4.7), (11, 13.4, 8), (11.1, 10.4, 1))
arr = np.array(data)

arr2 = arr.reshape(6, 2)  # 原数组没有发生改变
arr.reshape(-1, 2)  # 原数组没有发生改变
arr.reshape(2, -1)  # 原数组没有发生改变
arr.resize(6, 2)  # 直接作用于数组

# 降为一维
arr.ravel()
arr.ravel(order='F')  # 按照纵向
arr.flatten()
arr.flatten(order='F')
arr.flatten()[1] = 1000  # 原数组没有发生改变
arr.ravel()[1] = 100  # 原数组发生改变
arr.reshape(-1)[3] = 103  # 原数组发生改变
# 增加维度
arr_t = arr.ravel()
arr_t[np.newaxis, :]
# 合并
arr1 = np.arange(12).reshape(3, 4)
arr2 = np.array([[8.5, 6, 4.1, 2, 0.7], [1.5, 3, 5.4, 7, 3.9], [3.2, 4.5, 6, 3, 9]])
# 横向合并
np.hstack([arr1, arr2])
arr3 = np.array([[8.5, 6, 4.1, 2], [1.5, 3, 5.4, 7], [3.2, 4.5, 6, 3]])
# 纵向合并
np.vstack((arr1, arr3))
np.concatenate((arr1, arr2), axis=1)
np.concatenate((arr1, arr3), axis=0)
# 复制
arr4 = np.array([[0, 1], [2, 3]])
arr5 = np.tile(arr4, (4, 1))
print(arr4)
print(arr5)

(2)数组的ufunc广播机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import numpy as np

arr1 = np.array([[0, 1, 3], [4, 2, 9], [4, 5, 9], [1, -3, 4]])
arr2 = np.arange(0, 12).reshape(4, 3)
a = arr1 + arr2

# 应用广播机制(列补齐和行补齐)
arr3 = np.array([1, 2, 3])
b = arr1 + arr3
arr4 = np.array([[1], [2], [3], [4]])
c = arr1 + arr4
arr5 = np.array([[1, 2, 3]])
d = arr1 + arr5

# 通用函数
# 只能给两个参数
math = np.array([98, 83, 86, 92, 67, 82])
english = np.array([68, 74, 66, 82, 75, 89])
chinese = np.array([92, 83, 76, 85, 87, 77])
# 加
total = math + english + chinese
np.add(english, np.add(chinese, math))
# 减
np.subtract(math, english)
# 除
height = np.array([165, 177, 158, 169, 173])
weight = np.array([62, 73, 59, 72, 80])
e = weight/(height/100) ** 2
f = np.divide(weight, np.divide(height, 100)**2)
# 乘
np.multiply(height, weight)
g = height * weight
# 指数
np.power(arr2, 3)

s = np.array([1, 2, 3, 4, 3, 1, 2, 2, 4, 6, 7, 2, 4, 8, 4, 5])
test = [2, 4, 6]
# 去重h
h = np.unique(s)
# 判断s中的元素是否在test里面
np.in1d(s, test)
# 交集
np.intersect1d(test, s)
# 判断
arr1 = np.array([[0, 1, 3], [4, 2, 9], [4, 5, 9], [1, -3, 4]])
arr2 = np.array([1, 2, 3])

arr1 == arr2
np.equal(arr1, arr2)

np.greater(arr1, arr2)
arr1 > arr2
np.greater(arr1, arr2).any()  # 只要有一个为true就返回true
np.greater(arr1, arr2).all()  # 所有为true就返回true

s1 = np.array([-1, 1, np.nan])
np.isnan(s1)

(3)排序与搜索

在这里插入图片描述

import numpy as np

# 排序函数
s = np.array([13, 3, 4, 3, 1, 2, 2, 4, 6, 7, 2, 4, 8, 5])
np.sort(s)  # 升序
sorted(s)  # 升序
np.array(sorted(s, reverse=True))  # 降序
# 搜索函数
np.argsort(s)
s.argmax()
s.argmin()
arr1 = np.array([[0, 1, 3], [4, 2, 9], [4, 5, 9], [1, -3, 4]])
arr1.argmax(axis=1)
# 条件赋值
arr2 = np.arange(12).reshape(4, 3)
a = np.where(arr2 > 3, 1, 0)
b = np.extract(arr1 > arr2, arr1)
print(a)
print(b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值