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*'*')
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 = np.array([
[2.66667,1.33333],
[0.8,1.6]
])
f = np.array([[0.5,0.333333]])
L
是(2,2),f
是(1,2)。 f.T
是 (2,1)
A = L*f.T
这将 (2,2) 与 (2,1) 一起广播,将f.T
列复制到 (2,2)。
B = L*f[0,:]
C = L*f[0,:].T
f[0,:]
是 (2,) 形状,1d。f[0,:].T
是一样的,因为只有一个 1 轴可以切换。
这里 (2,2) 乘以 (2,) => (2,2) 乘以 (1,2),那就和 一样了L*f
。
在您将byA
的列相乘: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) 形状。
编辑
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 ]])
我切换了 [235] 和 [236]。
推荐阅读
- c++ - GLSL 统一 mat4 始终为 0
- java - 额外津贴不计入工资总额
- java - 在 patricia trie 中查找所有作为字符串前缀的键
- indexing - 为什么我一直看到第 13 行(“文件”)的未定义索引错误?
- wordpress - 如何在 WordPress Astra 主题中获取多语言页脚文本?
- javascript - 并行调用一组promise,但按顺序解决它们而不等待其他promise解决
- android - 如何为 Android 开发者切换动画?
- html - 滚动条在那里,但页面没有滚动
- reactjs - 在 jsx 标记中使用三级运算符作为属性?
- javascript - three.js - 如何使用 Alpha 通道渲染线条?