Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab到Python的numpy索引和乘法问题_Python_Matlab_Numpy - Fatal编程技术网

Matlab到Python的numpy索引和乘法问题

Matlab到Python的numpy索引和乘法问题,python,matlab,numpy,Python,Matlab,Numpy,我在MATLAB中有下面一行代码,我正在尝试将其转换为Pythonnumpy: pred = traindata(:,2:257)*beta; 在Python中,我有: pred = traindata[ : , 1:257]*beta beta是一个256 x 1的阵列 在MATLAB中 size(pred) = 1389 x 1 但在Python中 pred.shape = (1389L, 256L) 因此,我发现乘以beta数组会产生两个数组之间的差异 如何编写原始Python行,

我在MATLAB中有下面一行代码,我正在尝试将其转换为Python
numpy

pred = traindata(:,2:257)*beta;
在Python中,我有:

pred = traindata[ : , 1:257]*beta
beta
是一个256 x 1的阵列

在MATLAB中

size(pred) = 1389 x 1
但在Python中

pred.shape = (1389L, 256L)
因此,我发现乘以
beta
数组会产生两个数组之间的差异


如何编写原始Python行,使
pred
的大小为1389 x 1,就像在MATLAB中乘以beta数组一样?

我怀疑
beta
实际上是1D
numpy
数组。在
numpy
中,1D数组不是行向量或列向量,而MATLAB对此做了明确区分。这些只是不可知任何形状的一维阵列。如果必须,则需要手动将新的单例维度引入
beta
向量,以便于乘法。除此之外,
*
运算符实际执行元素级的乘法。要执行矩阵向量或矩阵乘法,必须使用
numpy
的函数

因此,您必须这样做:

import numpy as np # Just in case

pred = np.dot(traindata[:, 1:257], beta[:,None])
beta[:,None]
将创建一个2D
numpy
数组,其中1D数组中的元素沿行填充,有效地形成一个列向量(即256 x 1)。但是,如果您已经在
beta
上这样做了,那么您就不需要引入新的单例维度。正常使用
dot

pred = np.dot(traindata[:, 1:257], beta)

这个解决方案解决了我的问题。通过使用您提供的第一行代码,我的数组现在在Python中是1389 x 1。谢谢@尼克,没问题!很高兴我能帮忙。祝你好运@尼克,这只是
traindata=traindata[:,无]
。第二个参数中的
None
允许您创建两个维度的数组,而不是您自己显式创建第二个维度的数组。然后,它将用元素行方式填充2D矩阵。一般来说,这适用于任何
numpy
数组,如果您有
N
维度,您将创建一个
N+1
维度数组,最后一个维度的大小为1。
(1389L,)
表示
traindata
是一个1D数组。如果您想执行矩阵乘法,则需要包含单体维度。@Nick如果您只想查找两个
numpy
数组的点积,则不需要我所说的单体元素。只要做
np.dot(traindata,beta)
就可以了,假设它们都是相同大小的1D数组。只需单独使用
dot
。对于1D阵列,它在两个阵列之间执行点积,但在两个矩阵/向量之间执行矩阵向量乘法或矩阵矩阵乘法。矩阵向量或矩阵乘法归结为一系列点积计算,这就是为什么
dot
有它的名字。还要注意,对于python 3.5或更高版本,您可以用
a@b
替换
np.dot(a,b)
@
运算符的矩阵乘法操作与MATLAB
*
运算符类似(而
*
运算符的行为与MATLAB
*
运算符类似)。