利用Python进行数据分析_Pandas_Numpy高级应用
Numpy高级应用
1.ndarray对象内部机理
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import warnings
warnings.filterwarnings("ignore")
略
2.高级数组操作
arr = np.arange(8)
arr
array([0, 1, 2, 3, 4, 5, 6, 7])
arr_new = arr.reshape((4,2))
arr_new
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
arr
array([0, 1, 2, 3, 4, 5, 6, 7])
# 数组的合并
a1 = np.arange(6).reshape(2,3)
a2 = np.arange(6).reshape(2,3)
a1
array([[0, 1, 2],
[3, 4, 5]])
a2
array([[0, 1, 2],
[3, 4, 5]])
a = np.concatenate([a1,a2],axis=0)
a
array([[0, 1, 2],
[3, 4, 5],
[0, 1, 2],
[3, 4, 5]])
b = np.concatenate([a1,a2],axis=1)
b
array([[0, 1, 2, 0, 1, 2],
[3, 4, 5, 3, 4, 5]])
# 数组的拆分
b
array([[0, 1, 2, 0, 1, 2],
[3, 4, 5, 3, 4, 5]])
c1,c2,c3 = np.hsplit(b,[2,4])
c1
array([[0, 1],
[3, 4]])
c2
array([[2, 0],
[5, 3]])
c3
array([[1, 2],
[4, 5]])
3.广播
b
array([[0, 1, 2, 0, 1, 2],
[3, 4, 5, 3, 4, 5]])
b.mean()
2.5
demened = b-b.mean()
demened
array([[-2.5, -1.5, -0.5, -2.5, -1.5, -0.5],
[ 0.5, 1.5, 2.5, 0.5, 1.5, 2.5]])
广播的原则
如果两个数组的后缘维度 (trailing dimension,即从末尾开始算起的维度) 的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失和 (或)长度为1的维度上进行。
c = np.arange(12).reshape((4,3))
c
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
mean(0) 表示沿着第一个轴(通常是行)计算均值。对于一个矩阵,这将返回每列的均值。
mean(1) 表示沿着第一个轴(通常是列)计算均值。对于一个矩阵,这将返回每行的均值。
例如, 如果 c 是一个 3x4 的矩阵,c.mean(0) 将返回一个包含 4 个元素的数组,每个元素是相应列的均值。
row_means_x = c.mean(1)
row_means_x
array([ 1., 4., 7., 10.])
row_means_y = c.mean(0)
row_means_y
array([4.5, 5.5, 6.5])
row_means_x.reshape((4,1))
array([[ 1.],
[ 4.],
[ 7.],
[10.]])
demened = c - row_means_x.reshape((4,1))
demened
array([[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.]])
案例
import numpy as np
# 创建一个三维数组 A,形状为 (3, 1, 4)
A = np.array([[[1, 2, 3, 4]] * 1, [[5, 6, 7, 8]] * 1, [[9, 10, 11, 12]] * 1])
# 创建一个一维数组 B,形状为 (4,)
B = np.array([0, 1, 2, 3])
# 广播数组 B 到数组 A
result = A + B
# 输出结果
print(result)
[[[ 1 3 5 7]]
[[ 5 7 9 11]]
[[ 9 11 13 15]]]
假设我们有一个三维数组 A 和一个二维数组 B,它们的形状分别为 (3, 2, 4) 和 (2, 4)。我们将尝试对它们进行相加操作,利用广播规则。
import numpy as np
# 创建一个三维数组 A,形状为 (3, 2, 4)
A = np.random.randint(1, 10, size=(3, 2, 4))
# 创建一个二维数组 B,形状为 (2, 4)
B = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
# 广播数组 B 到数组 A
result = A + B
# 输出原始数组 A 和 B
print("Array A:")
print(A)
print("\nArray B:")
print(B)
# 输出广播后的结果数组
print(result)
Array A:
[[[7 6 2 3]
[3 6 9 3]]
[[4 6 6 9]
[9 8 9 7]]
[[3 7 1 7]
[2 2 2 8]]]
Array B:
[[1 2 3 4]
[5 6 7 8]]
Broadcasted Result:
[[[ 8 8 5 7]
[ 8 12 16 11]]
[[ 5 8 9 13]
[14 14 16 15]]
[[ 4 9 4 11]
[ 7 8 9 16]]]
本文来自博客园,作者:江雪独钓翁,转载请注明原文链接:https://www.cnblogs.com/zhouwp/p/17916666.html