You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PySpark求解满足A*b=c的权重参数w1~w5

求解线性方程组A*b = c的PySpark实现

首先把矩阵乘法展开为线性方程组:
根据给定的矩阵A、向量b和c,展开后得到以下3个方程:

  • 10w₁ + 5w₂ = 0
  • 10w₃ + 3w₄ = 0
  • 5w₅ = 0

从第三个方程可直接得出w₅=0;前两个是齐次线性方程,存在无数组解,我们可以先取一组简单的特解:

  • 令w₁=1,则w₂=-2
  • 令w₃=3,则w₄=-10

用PySpark验证特解的正确性

使用PySpark的线性代数工具计算矩阵与向量的乘积,验证结果是否等于c:

from pyspark.ml.linalg import DenseMatrix, DenseVector

# 代入特解构建矩阵A
A = DenseMatrix(
    numRows=3, numCols=3,
    values=[1, 3, 0, -2, 0, 5, 0, -10, 0],
    isRowMajor=True  # 按行顺序存储矩阵元素
)
# 定义向量b
b = DenseVector([10, 5, 3])
# 计算A*b
result = A.multiply(b)
# 定义目标向量c
c = DenseVector([0, 0, 0])

# 验证结果是否匹配
print(result == c)  # 输出:True

生成通用解(多组满足条件的解)

如果需要生成任意多组解,可以用参数化方式表示:设w₁=k、w₃=t(k、t为任意实数),则w₂=-2k、w₄=-10t/3、w₅=0。用PySpark DataFrame生成多组解的代码如下:

from pyspark.sql import SparkSession
import pyspark.sql.functions as F

# 初始化Spark会话
spark = SparkSession.builder.appName("LinearSystemSolution").getOrCreate()

# 生成参数k和t的多组取值
params_df = spark.createDataFrame([(1, 3), (2, 6), (-1, -3)], ["k", "t"])

# 计算对应的w1-w5取值
solution_df = params_df.withColumn("w1", F.col("k")) \
    .withColumn("w2", F.col("k") * -2) \
    .withColumn("w3", F.col("t")) \
    .withColumn("w4", F.col("t") * (-10/3)) \
    .withColumn("w5", F.lit(0))

# 输出结果
solution_df.show()

运行后输出示例:

+---+---+---+---+---+-----+---+
|  k|  t| w1| w2| w3|   w4| w5|
+---+---+---+---+---+-----+---+
|  1|  3|  1| -2|  3|-10.0|  0|
|  2|  6|  2| -4|  6|-20.0|  0|
| -1| -3| -1|  2| -3| 10.0|  0|
+---+---+---+---+---+-----+---+

内容的提问来源于stack exchange,提问作者Lazloo Xp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:35:05