从文档中,这里是元素划分如何正常工作
a1 = np.array([8,12,14])
b1 = np.array([4,6,7])
a1/b1
array([2, 2, 2])
Run Code Online (Sandbox Code Playgroud)
哪个有效.我想,我在不同的阵列上尝试同样的事情而事实并非如此.对于两个3-dim向量,它返回3x3矩阵.我甚至确保他们的"形状相同",但没有区别.
>> t
array([[ 3.17021277e+00],
[ 4.45795858e-15],
[ 7.52842809e-01]])
>> s
array([ 1.00000000e+00, 7.86202619e+02, 7.52842809e-01])
>> t/s
array([[ 3.17021277e+00, 4.03231011e-03, 4.21098897e+00],
[ 4.45795858e-15, 5.67024132e-18, 5.92149984e-15],
[ 7.52842809e-01, 9.57568432e-04, 1.00000000e+00]])
t/s.T
array([[ 3.17021277e+00, 4.03231011e-03, 4.21098897e+00],
[ 4.45795858e-15, 5.67024132e-18, 5.92149984e-15],
[ 7.52842809e-01, 9.57568432e-04, 1.00000000e+00]])
Run Code Online (Sandbox Code Playgroud)
Mag*_*n88 11
这是因为两个数组的形状是t.shape =(3,1)和s.shape =(3,).所以广播规则适用:他们声明如果两个维度相等,那么就按元素进行,如果它们不相同则会失败,除非其中一个是一个,这就是它变得有趣的地方:在这种情况下维度为1的数组将迭代其他维度的所有元素的操作.
我想你想做的就是
t[:,0] / s
Run Code Online (Sandbox Code Playgroud)
要么
np.squeeze(t) / s
Run Code Online (Sandbox Code Playgroud)
两者都将摆脱t中的空第一维.这真的不是一个错误它是一个功能!因为如果你有两个向量,并且你想在所有元素之间进行操作,那么你就是这样做的:
a = np.arange(3)
b = np.arange(3)
Run Code Online (Sandbox Code Playgroud)
你可以现在做的元素:
a*b = [0,1,4]
Run Code Online (Sandbox Code Playgroud)
如果您希望在所有元素之间执行此操作,则可以插入尺寸为1的尺寸,如下所示:
a[np.newaxis,:] * b[:,np.newaxis]
Run Code Online (Sandbox Code Playgroud)
试试看!它确实是一个方便的概念,虽然我一开始看到这是多么令人困惑.
| 归档时间: |
|
| 查看次数: |
37209 次 |
| 最近记录: |