看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.DataFrame.dot()
方法用于执行矩阵乘法(或称为点积运算)。它可以对 DataFrame 与其他 DataFrame、Series 或者数组进行矩阵乘法运算,并返回一个新的 DataFrame 或 Series,具体取决于传入的参数类型。
计算DataFrame和other之间的矩阵乘法。此方法计算DataFrame与其他Series、DataFrame或numpy数组的值之间的矩阵乘积。
它也可以使用 self @ other
。
DataFrame.dot(
other
)
DataFrame和其他维度必须兼容,才能计算矩阵乘法。此外,DataFrame的列名和other的索引必须包含相同的值,因为它们将在乘法之前对齐。
Series的点方法计算内积,而不是这里的矩阵积。
dot()
方法的 DataFrame 进行点积运算的矩阵。注意事项:
other
是一个 DataFrame 时,调用的 DataFrame 列数必须与 other
的行数相同,否则会引发错误。other
是一个 Series 或数组时,调用的 DataFrame 列数必须与 other
的长度相同。other
是一个 DataFrame 或数组:返回一个新的 DataFrame,其元素为矩阵乘法(点积)运算的结果。other
是一个 Series:返回一个新的 Series,其元素为矩阵乘法(点积)运算的结果。dot()
方法广泛用于需要进行矩阵运算的场景,比如线性代数计算、求解线性方程组、机器学习中的特征加权求和等。在实际应用中,常用于计算向量和矩阵之间的点积,或者两个矩阵之间的乘法。
在这里,我们将DataFrame与Series相乘。
df = pd.DataFrame([[0, 1, -2, -1], [1, 1, 1, 1]])
s = pd.Series([1, 1, 2, 1])
df.dot(s)
'''
0 -4
1 5
dtype: int64
'''
在这里,我们将一个DataFrame与另一个DataFame相乘。
other = pd.DataFrame([[0, 1], [1, 2], [-1, -1], [2, 0]])
df.dot(other)
'''
0 1
0 1 4
1 2 2
'''
请注意,点法给出的结果与 @ 计算相同:
df @ other
'''
0 1
0 1 4
1 2 2
'''
如果other是np.array,dot方法也可以使用。
arr = np.array([[0, 1], [1, 2], [-1, -1], [2, 0]])
df.dot(arr)
'''
0 1
0 1 4
1 2 2
'''
请注意,对象的打乱不会改变结果。
s2 = s.reindex([1, 0, 2, 3])
df.dot(s2)
'''
0 -4
1 5
dtype: int64
'''
import pandas as pd
# 构造示例数据
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
s = pd.Series([0.5, 1.5], index=['A', 'B'])
# 输出示例数据
print(f"原始DataFrame:\n{df}")
print(f"原始Series:\n{s}")
# 进行点积运算
result = df.dot(s)
# 输出结果
print(f"DataFrame与Series的点积运算结果:\n{result}")
输出:
原始DataFrame:
A B
0 1 4
1 2 5
2 3 6
原始Series:
A 0.5
B 1.5
dtype: float64
DataFrame与Series的点积运算结果:
0 6.5
1 8.0
2 9.5
dtype: float64
在这个例子中,DataFrame df
中的每一行与 Series s
进行点积运算,得到一个新的 Series,其中每个元素是对应行与 s
的点积结果。
import pandas as pd
# 构造两个示例DataFrame
df1 = pd.DataFrame({
'A': [1, 2],
'B': [3, 4]
})
df2 = pd.DataFrame({
'C': [5, 6],
'D': [7, 8]
})
# 输出示例数据
print(f"原始DataFrame df1:\n{df1}")
print(f"原始DataFrame df2:\n{df2}")
# 进行矩阵乘法运算
result = df1.dot(df2)
# 输出结果
print(f"DataFrame与DataFrame的矩阵乘法结果:\n{result}")
输出:
原始DataFrame df1:
A B
0 1 3
1 2 4
原始DataFrame df2:
C D
0 5 7
1 6 8
DataFrame与DataFrame的矩阵乘法结果:
C D
0 23 31
1 34 46
在这个示例中,df1
和 df2
之间的点积运算相当于进行矩阵乘法,结果是一个新的 DataFrame,其中每个元素是矩阵乘法后的值。
import pandas as pd
import numpy as np
# 构造示例DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 构造示例数组
arr = np.array([0.5, 2])
# 输出示例数据
print(f"原始DataFrame:\n{df}")
print(f"原始数组:\n{arr}")
# 进行点积运算
result = df.dot(arr)
# 输出结果
print(f"DataFrame与数组的点积运算结果:\n{result}")
输出:
原始DataFrame:
A B
0 1 4
1 2 5
2 3 6
原始数组:
[0.5 2. ]
DataFrame与数组的点积运算结果:
0 9.0
1 11.5
2 14.0
dtype: float64
在这个示例中,DataFrame df
中的每一行与数组 arr
进行点积运算,得到一个新的 Series,每个元素是对应行与 arr
的点积结果。
通过这些示例,可以看到 dot()
方法在执行线性代数运算时的强大功能,非常适用于各类矩阵运算场景。
更新时间:2024-08-10 19:12:20 标签:pandas python dot 矩阵乘法 点积