如何从matlab到python编写循环

kxeu7u2r  于 2022-10-22  发布在  Matlab
关注(0)|答案(1)|浏览(308)

我想编写以下从matlab到python的讨厌的循环

for i = 1:N
    for j = 1:N
        Ab(i,j) = (Ap(i)*Ap(j))^(0.5)*(1 - kij(i,j)) ;
    end
end

我尝试了以下操作,但结果是“所有输入数组必须具有相同的维数,但索引0处的数组具有2个维数,索引1处的数组有1个维数”

ab=np.matrix((2, 2))
for i  in range(0,nc):
  for j in range(0, nc):
    np.append(ab,((Ap[i]*Ap[j])**(0.5)*(1 - kij[i][j])))
q5iwbnjs

q5iwbnjs1#

缺少了一点上下文,但如果我猜正确地查看Matlab部分,您可以编写这样的内容。

ab = np.zeros((2, 2)) 
for i in range(ab.shape[0]): # you do not have to put 0 and you can use size of array to limit iterations
  for j in range(ab.shape[1]):
    ab[i, j] = (Ap[i]*Ap[j])**(0.5)*(1 - kij[i][j])))

我的假设

  • ab矩阵意味着是2x2矩阵,而不是值为[2,2]的1x2矩阵。这就是np.matrix令人困惑的功能(至少这是我从Matlab得到的期望)。np.zeros-使用大小为2x2的所有零创建数组。数组和矩阵在numpy上有点不同,因为矩阵正在慢慢被弃用(更多信息请参见此处https://numpy.org/doc/stable/reference/generated/numpy.matrix.html?highlight=matrix#numpy.matrix)
  • nc-是ab矩阵的大小
    你为什么出错
  • np.matrix((2,2))-创建值为2和2的1x2矩阵2,2
  • (Ap[i]Ap[j])**(0.5)(1-kij[i][j]
  • np.append(ab,scalarvalue)-试图将标量附加到矩阵,但ab和标量值之间存在维度不匹配,这在错误中说明。本质上,为了使其工作,它们应该是相似类型的对象。
  • 示例*
>>> np.zeros((2, 2))
array([[0., 0.],
       [0., 0.]])

>>> np.matrix((2, 2))
matrix([[2, 2]])

>>> np.array((2, 2))
array([2, 2])

>> np.append(np.matrix((2, 2)), [[3, 3]], axis=0)
matrix([[2, 2],
        [3, 3]])

>> np.append(np.zeros((2, 2)), [[3, 3]], axis=0)
array([[0., 0.],
       [0., 0.],
       [3., 3.]])

相关问题