Loading

利用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]]]


posted @ 2023-12-20 15:48  ZhouSpeaks  阅读(49)  评论(0)    收藏  举报