我是新来的, 所以,用numpy,有可能用一个矩阵的向量得到一个向量的矩阵吗?” 例如:
matrix1(
[
[1, 2, 3],
[1, 2, 3],
[1, 2, 3]
])
matrix2(
[
[2, 4, 6],
[2, 4, 6],
[2, 4, 6]
])
-->
matrix(
[
[array('1 2'), array('2 4'), array('3 6')],
[array('1 2'), array('2 4'), array('3 6')],
[array('1 2'), array('2 4'), array('3 6')]
])
我对numpy还不熟悉,所以我不确定是否允许它在numpy矩阵中放任何东西,或者仅仅是数字。 从google上获取答案并不容易,比如“向量矩阵和向量矩阵”
numpy
没有独立于“矩阵”的“向量”概念,它确实有“矩阵”和“数组”的不同概念,但大多数人完全避免使用矩阵表示。如果使用数组,“vector”、“matrix”和“tensor”的概念都包含在数组“shape”属性的一般概念下。在这个世界观中,向量和矩阵都是二维数组,仅以其形状区分。行向量是形状为
(1, n)
的数组,而列向量是形状为(n, 1)
的数组。矩阵是形状为(n, m)
的数组。一维数组有时会表现得像向量,这取决于上下文,但通常您会发现,除非您“升级”它们,否则无法获得所需的内容。考虑到这些,这里有一个可能的答案来回答你的问题。首先,我们创建一个一维数组:
现在,我们对其进行重新造型以创建列向量。这里的
-1
告诉numpy
计算给定输入的正确大小。请注意此项开始和结束处的双括号。这暗示着这是一个二维数组,尽管一维的大小只有1。
我们可以做同样的事情,交换维度,得到一行。再次注意双括号。
可以看出这些是二维数组,因为一维数组的
shape
元组中只有一个值:要从列向量构建矩阵,我们可以使用
hstack
。有很多其他方法可能更快,但这是一个很好的起点。这里,请注意[vcol]
不是一个numpy
对象,而是一个普通的python列表,因此[vcol] * 3
与[vcol, vcol, vcol]
的含义相同。并且
vstack
从行向量给出了相同的结果。“从矩阵的向量构造向量矩阵”的任何其他解释都不太可能在
numpy
中生成您真正想要的东西!既然你提到要做线性代数,这里有两个可能的操作。这假设您使用的是最新版本的python来使用新的
@
运算符,该运算符为数组的矩阵乘法提供了明确的内联表示法对于数组,乘法总是按元素顺序进行。但有时也有广播。对于具有相同形状的值,这是简单的元素乘法:
当值具有不同的形状时,如果可能,它们将一起广播以产生合理的结果:
广播的工作方式与您对其他形状的期望一样:
如果需要点积,则必须使用
@
运算符:注意,与
*
运算符不同,这不是对称的:一开始这可能有点混乱,因为这看起来与
vrow * vcol
相同,但不要上当。*
将生成相同的结果,而不考虑参数顺序。最后,对于矩阵向量积:再次观察
@
和*
之间的区别:1。遗憾的是,这只存在于Python3.5之后。如果需要使用早期版本,则所有相同的建议都适用,除了不使用
a @ b
的内联表示法外,还必须使用np.dot(a, b)
。numpy
的matrix
类型重写*
以类似@
的行为。。。但是你不能用同样的方式进行元素乘法或广播!因此,即使您有一个早期版本,我也不建议使用matrix
类型。相关问题 更多 >
编程相关推荐