循环NumPy错误:所有输入数组必须具有相同的维数

1bqhqjot  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(135)

我想要编写以下代码:

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])))
hgqdbh6s

hgqdbh6s1#

这里缺少一点上下文,但如果我猜对了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矩阵令人困惑的地方(至少这些是我对MatLab的期望)。Np.zeros-创建大小为2x2的全零数组。数组和矩阵在NumPy方面略有不同,By Matrix正在慢慢弃用(此处更多内容为https://numpy.org/doc/stable/reference/generated/numpy.matrix.html?highlight=matrix#numpy.matrix)
  • ab矩阵的nc-is大小
    为什么会出错?
  • np.Matrix((2,2))-创建值为2和2的1x2矩阵2,2
  • (ap[i]ap[j])**(0.5)(1-kij[i][j]))-这看起来像一个标量值
  • np.append(ab,scalar_value)-尝试将标量附加到矩阵,但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.]])

相关问题