我正在尝试将以下Matlab代码转换为Python:
for j=1:n
for i=1:m
a1(i,j) = sum(-4*f*d(i))*log(NormPS{i,j}(f1:f2)));
end
end
其中n=55且m=103; F具有1 × 441维矩阵(考虑任何随机值)F1=10和F2=450,且X1 M0 N1 X给出441 × 1维矩阵,而X1 M1 N1 X是1 × 103维矩阵。
下面是我在Python中尝试的内容:
for j in range(np.int64(n)):
for i in range(np.int64(m)):
a= -np.mat(4)*np.mat(f)*np.mat(d[:i])
b=np.log((NormPS[i,j] [(d).astype(int)]).reshape(-1,1))
#check=(d[:i])
我在Matlab的log部分得到了相同的结果,在我的python代码中是b。但是,对于sum部分,我得到了这个错误error : shapes (1,441) and (0,103) not aligned: 441 (dim 1) != 0 (dim 0)
Traceback (most recent call last):
File ~\Desktop\spyder_files\2D_spyder_file\algebra_2D_spyder.py:48 in <module> a= -np.mat(4)*np.mat(f)*np.mat(d[:i])
File ~\anaconda3\lib\site-packages\numpy\matrixlib\defmatrix.py:218 in mul return N.dot(self, asmatrix(other))
File <__array_function__ internals>:5 in dot ValueError: shapes (1,441) and (0,103) not aligned: 441 (dim 1) != 0 (dim 0)
有什么方法可以重写a=sum(-4*f*d(i))
吗?我确信错误在d(i)
中。
1条答案
按热度按时间jutyujz01#
首先,Numpy建议不再使用Matrix类。
同样,你在Matlab中使用
d(i)
,在Python中使用d[:i]
,它们是不等价的。Matlab的d(i)
将返回数组d
中的单个元素。d[:i]
是从索引0到索引i的切片。示例:
我认为,如果
f
和d
的尺寸如你所说,那么你要寻找的是:退货:
但是,根据您包含的错误消息,看起来
d
实际上是(0,103)
...如果是这种情况,请在上述代码中将d[0,i]
更改为d[i]
,这样应该可以正常工作。