python静默转置秩1数组

python静默转置秩1数组,python,arrays,matrix-multiplication,Python,Arrays,Matrix Multiplication,给予 Python3似乎在默默地将x2转换为(1,3)数组,以便将其乘以x1。还是我缺少一些语法?数组是由Numpy生成的 引用广播文件: 术语广播描述了numpy如何处理具有不同特性的阵列 算术运算中的形状。在某些限制条件下,, 较小的阵列在较大的阵列上“广播”,以便 具有兼容的形状。广播提供了一种矢量化的方法 数组操作,以使循环在C而不是Python中发生。信息技术 这样做不会产生不必要的数据拷贝,通常会导致 高效的算法实现。然而,在某些情况下 广播是一个坏主意,因为它会导致对资源的低效利用

给予

Python3似乎在默默地将x2转换为(1,3)数组,以便将其乘以x1。还是我缺少一些语法?

数组是由Numpy生成的

引用广播文件:

术语广播描述了numpy如何处理具有不同特性的阵列 算术运算中的形状。在某些限制条件下,, 较小的阵列在较大的阵列上“广播”,以便 具有兼容的形状。广播提供了一种矢量化的方法 数组操作,以使循环在C而不是Python中发生。信息技术 这样做不会产生不必要的数据拷贝,通常会导致 高效的算法实现。然而,在某些情况下 广播是一个坏主意,因为它会导致对资源的低效利用 降低计算速度的内存

在代码中添加以下行,将
x2
的形状显式设置为
(3,1)
,将出现如下错误:

x1
 [[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]] 

x2
 [0. 1. 2.]
(3,) 

Here, the shape of x2 is 3 rows by 1 column 
x1@x2 =
 [ 5. 14. 23.]

x2@x1  should not be possible, BUT
 [15. 18. 21.] 
输出

import numpy as np
x1 = np.arange(9.0).reshape((3, 3))
print(x1.shape) # new line added
print("x1\n",x1,"\n")
x2 = np.arange(3.0)
x2 = x2.reshape(3, 1) # new line added
print("x2\n",x2)
print(x2.shape,"\n")
print("Here, the shape of x2 is 3 rows by 1 column ")
print("x1@x2\n",x1@x2)
print("")
print("x2@x1  should not be possible\n",x2@x1,"\n"*3)
(3,3)
x1
[[0. 1. 2.]
[3. 4. 5.]
[6. 7. 8.]] 
x2
[[0.]
[1.]
[2.]]
(3, 1) 
这里,x2的形状是3行1列
x1@x2
[[ 5.]
[14.]
[23.]]
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
12打印(”x1@x2\n“,x1@x2)
13印刷体(“”)
--->14印刷品(”x2@x1不应该是可能的\n“,x2@x1,“\n”*3)
ValueError:matmul:输入操作数1的核心维度0与gufunc签名(n?,k),(k,m?)->(n?,m?)不匹配(大小3与1不同)
阵列正在由Numpy执行

引用广播文件:

术语广播描述了numpy如何处理具有不同特性的阵列 算术运算中的形状。在某些限制条件下,, 较小的阵列在较大的阵列上“广播”,以便 具有兼容的形状。广播提供了一种矢量化的方法 数组操作,以使循环在C而不是Python中发生。信息技术 这样做不会产生不必要的数据拷贝,通常会导致 高效的算法实现。然而,在某些情况下 广播是一个坏主意,因为它会导致对资源的低效利用 降低计算速度的内存

在代码中添加以下行,将
x2
的形状显式设置为
(3,1)
,将出现如下错误:

x1
 [[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]] 

x2
 [0. 1. 2.]
(3,) 

Here, the shape of x2 is 3 rows by 1 column 
x1@x2 =
 [ 5. 14. 23.]

x2@x1  should not be possible, BUT
 [15. 18. 21.] 
输出

import numpy as np
x1 = np.arange(9.0).reshape((3, 3))
print(x1.shape) # new line added
print("x1\n",x1,"\n")
x2 = np.arange(3.0)
x2 = x2.reshape(3, 1) # new line added
print("x2\n",x2)
print(x2.shape,"\n")
print("Here, the shape of x2 is 3 rows by 1 column ")
print("x1@x2\n",x1@x2)
print("")
print("x2@x1  should not be possible\n",x2@x1,"\n"*3)
(3,3)
x1
[[0. 1. 2.]
[3. 4. 5.]
[6. 7. 8.]] 
x2
[[0.]
[1.]
[2.]]
(3, 1) 
这里,x2的形状是3行1列
x1@x2
[[ 5.]
[14.]
[23.]]
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
12打印(”x1@x2\n“,x1@x2)
13印刷体(“”)
--->14印刷品(”x2@x1不应该是可能的\n“,x2@x1,“\n”*3)
ValueError:matmul:输入操作数1的核心维度0与gufunc签名(n?,k),(k,m?)->(n?,m?)不匹配(大小3与1不同)

谢谢你,拉胡尔。这澄清了许多深入学习的python代码,这些代码对我来说总是显得马虎和混乱。@aquagremlin:很高兴能提供帮助@水精灵不是x2*x1失败了吗?如果您注释掉x2*x1行,它就工作了。也就是说,x1*x2可以工作,即(3,3)*(3,1),但在尝试x2*x1时失败,即(3,1)*(3,3)。应该如此。对不起,我的视力模糊了。发生在我们当中最好的人身上:)谢谢你,拉胡尔。这澄清了许多深入学习的python代码,这些代码对我来说总是显得马虎和混乱。@aquagremlin:很高兴能提供帮助@水精灵不是x2*x1失败了吗?如果您注释掉x2*x1行,它就工作了。也就是说,x1*x2可以工作,即(3,3)*(3,1),但在尝试x2*x1时失败,即(3,1)*(3,3)。这是应该的。对不起,我的视力模糊了。发生在我们当中最好的人身上:)