【问题标题】:Python array rows*1column numpy for numpy.dot(matrix,matrix2)Python 数组 rows*1column numpy for numpy.dot(matrix,matrix2)
【发布时间】:2018-06-13 23:08:25
【问题描述】:

a = [1, 2, 3] x = numpy.array(a) 3 列和 1 行的矩阵?我知道x = numpy.array([a]) 是一个 1x4 矩阵,但我需要对位。 我需要将两个矩阵相乘,但第一个是插入到 numpy.array(a) 中的列表

还没有找到一种方法的文档来做一个 for 和 cicle throught a 将它添加到 x。 编辑:我正在研究线性回归,所以我需要一个 nrows x 1 col,我的原始数据在一个列表中,并且正在使用 numpy dot() 函数进行乘法,我需要将我的列表转换为矩阵 nrowsx 1 列。 固定的解决方案是将 x = numpy.array([a]) 与 x = x.transpose() 转置,这给了我一个 nx1 矩阵。

感谢您帮助我思考。

【问题讨论】:

  • 不知道你说的a list insert into an array是什么意思。
  • @jpp 看到了这个问题,但我在问如何制作多行一列矩阵,我将编辑我的问题以添加我正在使用 numpy.dot(matrix1, matrix)
  • @hpaulj 我还没有特别读过,将在列表插入到数组中进行快速谷歌搜索,看看我是否得到我想要的结果。
  • 你有 3 个元素。除了认为一维数组有行和列的错误之外,您从哪里得到它有 4 列的想法?

标签: python python-3.x numpy


【解决方案1】:

它是一个一维数组:

In [653]: x = np.array([1,2,3])
In [654]: x
Out[654]: array([1, 2, 3])
In [655]: x.shape
Out[655]: (3,)
In [656]: x.ndim
Out[656]: 1

另一个是二维的:

In [657]: y = np.array([[1,2,3]])
In [658]: y
Out[658]: array([[1, 2, 3]])
In [659]: y.shape
Out[659]: (1, 3)
In [660]: y.ndim
Out[660]: 2

y的转置

In [661]: z = y.T
In [662]: z
Out[662]: 
array([[1],
       [2],
       [3]])
In [663]: z.shape
Out[663]: (3, 1)

x的转置与x相同


一些乘法选项:

In [664]: np.dot(x,y)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-664-6849a5f7ad6c> in <module>()
----> 1 np.dot(x,y)

ValueError: shapes (3,) and (1,3) not aligned: 3 (dim 0) != 1 (dim 0)

阅读np.dot 了解有关形状交互的规则。关键短语是“x 的最后一个维度对 y 的第二个到最后一个”。

In [665]: np.dot(y,x)
Out[665]: array([14])

这里 (1,3) 对与 (3,) t- 产生 (1,)。

元素明智的乘法。此处适用广播规则

In [666]: x*y   
Out[666]: array([[1, 4, 9]])

(3,) 与 (1,3) -> (1,3)(1,3) -> (1,3)

In [667]: x*z
Out[667]: 
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])

(3,) 与 (3,1) -> (1,3)(3,1) -> (3,3)


将 (3,) 数组更改为 (3,1) 的便捷方法是使用 None (np.newaxis):

In [671]: x[:,None]
Out[671]: 
array([[1],
       [2],
       [3]])

In [672]: np.dot(x[:,None],y)
Out[672]: 
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])

(3,1) 点与 (1,3) -> (3,3)

【讨论】:

  • 但是如果我像 z = numpy.dot(x*y) 那样将两个矩阵相乘,x 是否会被视为 3x1 矩阵?我把它作为你的答案,我只会得到一个丑陋的错误消息,我正在做一个线性回归,为此我需要将一个列表变成一个矩阵,该矩阵的行数与列表中的项目一样多,我只是不知道如何.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 2021-11-18
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多