Numpy 一维数组和数组行的数组产生不同的结果
我很难理解为什么B或C都不等于A。我如何从f中提取特定行,并计算与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*'*
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,)形状,1df[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 ]])