NumPy 中的矩阵和向量

numpy的

ndarray

类用于表示矩阵和向量。

要在numpy中构造矩阵,我们在列表中列出矩阵的行,

并将该列表传递给numpy数组构造函数。

例如,构造与矩阵对应的numpy数组

我们会这样做

A = np.array([[1,-1,2],[3,2,0]])

向量只是具有单列的数组。 例如,构建向量

我们会这样做

v = np.array([[2],[1],[3]])

更方便的方法是转置相应的行向量。 例如,为了使上面的矢量,我们可以改为转置行向量

这个代码是

v = np.transpose(np.array([[2,1,3]]))

numpy重载数组索引和切片符号以访问矩阵的各个部分。 例如,要打印矩阵A中的右下方条目,我们会这样做

print(A[1,2])

要切出A矩阵中的第二列,我们会这样做

col = A[:,1:2]

第一个切片选择A中的所有行,而第二个切片仅选择每行中的中间条目。

要进行矩阵乘法或矩阵向量乘法,我们使用np.dot()方法。

w = np.dot(A,v)

用numpy求解方程组

线性代数中比较常见的问题之一是求解矩阵向量方程。 这是一个例子。 我们寻找解决方程的向量x

A

x

=

b

我们首先构建A和b的数组。

A = np.array([[2,1,-2],[3,0,1],[1,1,-1]])

b = np.transpose(np.array([[-3,5,-2]]))

为了解决这个系统

x = np.linalg.solve(A,b)

应用:多元线性回归

在多元回归问题中,我们寻找一种能够将输入数据点映射到结果值的函数。 每个数据点是

特征向量(x1,x2,...,xm)

,由两个或多个捕获输入的各种特征的数据值组成。为了表示所有输入数据以及输出值的向量,我们设置了输入矩阵X和输出向量

y

在简单的最小二乘线性回归模型中,我们寻找向量

β

,使得乘积Xβ最接近结果向量

y

一旦我们构建了

β

向量,我们就可以使用它将输入数据映射到预测结果。 给定表单中的输入向量

我们可以计算预测结果值

计算β向量的公式是

β

= (

X

T

X

)

-1

X

T

y

在我们的下一个示例程序中,我将使用numpy构造适当的矩阵和向量并求解

β

向量。一旦我们解决了

β

,我们将使用它来预测我们最初从输入数据集中遗漏的一些测试数据点。

假设我们在numpy中构造了输入矩阵X和结果向量

y

,下面的代码将计算

β

向量:

Xt = np.transpose(X)

XtX = np.dot(Xt,X)

Xty = np.dot(Xt,y)

beta = np.linalg.solve(XtX,Xty)

最后一行使用

np.linalg.solve

计算

β

,因为等式是:

β

= (

X

T

X

)

-1

X

T

y

在数学上等价于方程组:

(

X

T

X

)

β

=

X

T

y

我将用于此示例的数据集是Windsor房价数据集,其中包含有关安大略省温莎市区房屋销售的信息。 输入变量涵盖了可能对房价产生影响的一系列因素,例如批量大小,卧室数量以及各种设施的存在。

此处

提供具有完整数据集的CSV文件。我从

这个网站

下载了数据集,该网站提供了大量涵盖大量主题的数据集。

这里现在是示例程序的源代码。

import csv

import numpy as np

def readData():

X = []

y = []

with open('Housing.csv') as f:

rdr = csv.reader(f)

Skip the header row

next(rdr)

Read X and y

for line in rdr:

xline = [1.0]

for s in line[:-1]:

xline.append(float(s))

X.append(xline)

y.append(float(line[-1]))

return (X,y)

X0,y0 = readData()

Convert all but the last 10 rows of the raw data to numpy arrays

d = len(X0)-10

X = np.array(X0[:d])

y = np.transpose(np.array([y0[:d]]))

Compute beta

Xt = np.transpose(X)

XtX = np.dot(Xt,X)

Xty = np.dot(Xt,y)

beta = np.linalg.solve(XtX,Xty)

print(beta)

Make predictions for the last 10 rows in the data set

for data,actual in zip(X0[d:],y0[d:]):

x = np.array([data])

prediction = np.dot(x,beta)

print('prediction = '+str(prediction[0,0])+' actual = '+str(actual))

原始数据集包含500多个条目 为了测试线性回归模型所做预测的准确性,我们使用除最后10个数据条目之外的所有数据条目来构建回归模型并计算

β

。一旦我们构建了

β

向量,我们就用它来预测最后10个输入值,然后将预测的房价与数据集中的实际房价进行比较。

以下是该计划产生的产出:

[[ -4.14106096e+03]

[ 3.55197583e+00]

[ 1.66328263e+03]

[ 1.45465644e+04]

[ 6.77755381e+03]

[ 6.58750520e+03]

[ 4.44683380e+03]

[ 5.60834856e+03]

[ 1.27979572e+04]

[ 1.24091640e+04]

[ 4.19931185e+03]

[ 9.42215457e+03]]

prediction = 97360.6550969 actual = 82500.0

prediction = 71774.1659014 actual = 83000.0

prediction = 92359.0891976 actual = 84000.0

prediction = 77748.2742379 actual = 85000.0

prediction = 91015.5903066 actual = 85000.0

prediction = 97545.1179047 actual = 91500.0

prediction = 97360.6550969 actual = 94000.0

prediction = 106006.800756 actual = 103000.0

prediction = 92451.6931269 actual = 105000.0

prediction = 73458.2949381 actual = 105000.0

总体而言,预测并不是非常好,但是一些预测有点接近正确。从这些数据中做出更好的预测将成为机器学习冬季学期教程的主题。

文章出处

由NumPy中文文档翻译,原作者为

劳伦斯大学

,翻译至:

http://www2.lawrence.edu/fast/GREGGJ/Python/numpy/numpyLA.html

python矩阵和向量乘积_NumPy 中的矩阵和向量相关推荐

  1. python矩阵和向量乘积_Numpy:将矩阵与向量数组相乘

    我很难进入numpy . 我最终想要的是一个由矩阵变换的矢量的简单箭袋图 . 我已经阅读了很多次,只是使用数组作为矩阵,足够公平 . 我有一个x和y坐标的网格 X,Y = np.meshgrid( n ...

  2. python numpy矩阵索引_python – Numpy中的矩阵索引

    索引后查看形状: In [295]: A=np.matrix([1,2,3]) In [296]: A.shape Out[296]: (1, 3) In [297]: A[0] Out[297]: ...

  3. c语言 矩阵转置_C语言中的矩阵转置

    c语言 矩阵转置 Here is the program for transpose of matrix in C. 这是在C中转置矩阵的程序. We first read a matrix of s ...

  4. matlab 矩阵角标,MATLAB中的矩阵索引

    MATLAB中的矩阵索引 作者:SteveEddins and Loren Shure   译:王茂春 利用矩阵的索引取出原矩阵的子集元素是一种有效的方式.MATLAB的多种索引类型不仅强大.灵活,而 ...

  5. python numpy矩阵索引_Numpy中的矩阵索引

    索引后查看形状:In [295]: A=np.matrix([1,2,3]) In [296]: A.shape Out[296]: (1, 3) In [297]: A[0] Out[297]: m ...

  6. python 矩阵元素相加_Numpy中元素级运算

    标量与矩阵的运算: 加法: values = [1,2,3,4,5] values = np.array(values) + 5 #现在 values 是包含 [6,7,8,9,10] 的一个 nda ...

  7. java中图片与像素矩阵转换,java - Java中具有矩阵乘法的图片转换不起作用 - 堆栈内存溢出...

    我正在用Java实现图片转换. 到目前为止,我已经实现了以下类: 矩阵 (持有一个3x3矩阵,该矩阵将用于与Vector相乘) 向量 (用于与变换矩阵相乘以生成原始图像像素的新位置) PictureT ...

  8. python读取sav文件_Numpy中数据的常用的保存与读取方法

    小书匠 深度学习 文章目录: 在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到 ...

  9. python numpy读取数据_numpy中以文本的方式存储以及读取数据方法

    这篇文章主要介绍了关于numpy中以文本的方式存储以及读取数据方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 Numpy中除了能够把数据以二进制文件的方式保存到文件中以外,还可以选 ...

最新文章

  1. [JAVAEE] 理解“自然模板“+使用 ModelAndView 对象
  2. leetcode17. 电话号码的字母组合--每天刷一道leetcode算法系列!
  3. 2022图神经网络5篇最新的研究综述:双曲/图分类/联邦/等变/异质性
  4. 上海交大、华为海思提出X-volution,发力网络核心基础架构创新
  5. Python实训day03am【sort、函数式编程、过滤器、lambda、文本文件读写】
  6. jenkins是什么_使用 Jenkins 自动发布服务到 Kubernetes
  7. nginx http server
  8. Web的测试内容和方法【转贴】
  9. 【JavaWeb】IDEA中启动SpringBoot项目及解决相关报错问题
  10. js Array 标准方法
  11. 明明安装了模块/包,Python提示无包/模块/报错
  12. ppt给图片增加高斯模糊_PPT图片处理小技巧
  13. E1: 在idea中执行flink程序时报错 No ExecutorFactory found to execute the application.
  14. Zxing系列之设置二维码图片背景透明教程
  15. 头条 上传图片大小_如何解决小说封面上传失败(不符合网站标准、缺少信息)的问题?...
  16. 新西兰奥克兰发生三车追尾事故 造成一死一伤
  17. 2022年系统集成企业的物联网平台首选:物联集成平台
  18. 使用JQuery快速高效制作网页交互特效第五章所有上机
  19. TALIB 中文文档 Momentum Indicator Functions 动量指标函数
  20. 波段选股王怎么在市场中利用头肩底实现杀跌

热门文章

  1. 华为emui11何时升鸿蒙,华为EMUI11迎来重大更新!23款机型可升级:加入鸿蒙特性...
  2. 怎么使用带有黑标的POS打印机
  3. python中有哪些颜色_8种颜色中哪一种最准确?
  4. 你在世界杯期间看球,DBA在世界杯期间……
  5. 关于MySQL的注意事项
  6. NameNode 和 SecondaryNameNode: Fsimage 和 Edits 解析、ovi命令、oev命令
  7. 安信可模块GPRS-GPS-A92G开发环境总结
  8. vue组件Vnode
  9. 扫描线算法讲解+例题
  10. 设计模式 – 模板设计模式