根据NumPydocumentation的说法,他们可能会反对他们的np.matrix
类。虽然阵列有大量的用例,但它们不能做所有的事情。具体来说,它们在执行相当基本的线性代数运算时会“中断”(您可以阅读更多关于它的内容here)
用python构建我自己的矩阵乘法模块并不太困难,但根本不会进行优化。我正在寻找另一个库,它有充分的线性代数支持,这是在BLAS(基本线性代数子程序)优化。或者至少,有没有关于如何DIY将BLAS集成到python的文档
编辑:所以有些人建议使用@
操作符,这就像把一只鼹鼠推下一个洞,让它立即在相邻的洞中弹出。本质上,正在发生的是调试器的噩梦:
W*x == w*x.T
W@x == W@x.T
您希望这里出现一个错误,让您知道您在定义矩阵时犯了一个错误。但是,由于阵列沿一个轴不存储二维信息,因此我不确定是否可以通过np.array
解决这个问题。(这些问题在np.matrix
中并不存在,但出于某种原因,开发人员似乎坚持要删除它)
如果坚持区分列向量和行向量,就可以这样做
您可以创建辅助函数来创建列和行向量:
我建议您仅在移植现有Matlab代码时使用这种类型的构造。您在读取他人编写的numpy代码时会遇到困难,许多库函数期望1D数组作为输入,而不是
(1, n)
形数组实际上,
numpy
通过matmul
操作符@
提供了BLAS支持的矩阵乘法。这将调用给定类的__matmul__
magic方法在上面的示例中,您所要做的就是
W @ x
其他线性代数的内容可以在
np.linalg
模块上找到编辑:我想你的问题更多的是语言的风格,而不是任何技术问题。我发现这个答案非常明确: Transposing a NumPy array
此外,我发现你不太可能找到不重要的东西,因为大多数主要的机器学习/数据科学框架都依赖它
相关问题 更多 >
编程相关推荐