Numpy 一维数组和数组行的数组产生不同的结果

Numpy 一维数组和数组行的数组产生不同的结果,numpy,Numpy,我很难理解为什么B或C都不等于A。我如何从f中提取特定行,并计算与A中相同的结果 import numpy as np L = np.array([ [2.66667,1.33333], [0.8,1.6] ]) f = np.array([[0.5,0.333333]]) A = L*f.T B = L*f[0,:] C = L*f[0,:].T print(20*'*') print(A) print(20*'*') print(B) print(20*'*

我很难理解为什么B或C都不等于A。我如何从f中提取特定行,并计算与
A
中相同的结果

import numpy as np

L = np.array([
    [2.66667,1.33333],
    [0.8,1.6]
    ])

f = np.array([[0.5,0.333333]])

A = L*f.T

B = L*f[0,:]
C = L*f[0,:].T

print(20*'*')
print(A)
print(20*'*')
print(B)
print(20*'*')
print(C)
print(20*'*')
输出:

********************
[[1.333335  0.666665 ]
 [0.2666664 0.5333328]]
********************
[[1.333335   0.44444289]
 [0.4        0.5333328 ]]
********************
[[1.333335   0.44444289]
 [0.4        0.5333328 ]]
********************
L
is(2,2),
f
is(1,2)<代码>f.Tis(2,1)

这将用(2,1)广播(2,2),将
f.T
列复制到(2,2)

f[0,:]
是(2,)形状,1d
f[0,:].T是相同的,因为只有一个1轴可以切换

这里(2,2)次(2,)=>(2,2)次(1,2),这与
L*f
相同

A
中,将
L
的列乘以
f

In [235]: L[0,:]*f[0,:]
Out[235]: array([1.333335  , 0.44444289])
B
中,是
L
的行:

In [236]: L[:,0]*f[0,:]
Out[236]: array([1.333335 , 0.2666664])
L
为(2,3)型时,行和列的混合和匹配更为清晰

编辑
我换了[235]和[236]。非常感谢您的回复!这意味着我可以通过
L[:,0]*f[0,:]
L[:,1]*f[0,:]逐步计算
A的结果。。。可能是在一个循环中,然后对数组进行联合编码?是否可以从
f
中提取第一行,并在一行中计算与
A
中相同的结果?它与
(MRIO_L.T*MRIO_f[0,:])一起工作。T
似乎有点过度设计(我最好说是反复试验)。我添加了迭代等价物。我使用
f[0]
,因为我们不需要“转置”它。看起来我在前面的示例中混淆了行和列。明白了,谢谢!非常有用……:)
B = L*f[0,:]
C = L*f[0,:].T
In [235]: L[0,:]*f[0,:]
Out[235]: array([1.333335  , 0.44444289])
In [236]: L[:,0]*f[0,:]
Out[236]: array([1.333335 , 0.2666664])
In [34]: np.array([L[:,i]*f[0] for i in range(2)]).T
Out[34]: 
array([[1.333335 , 0.666665 ],
       [0.2666664, 0.5333328]])
In [35]: np.array([L[i,:]*f[0] for i in range(2)])
Out[35]: 
array([[1.333335  , 0.44444289],
       [0.4       , 0.5333328 ]])