array([2,1]) 是 1 行和 2 列还是 2 行和 1 列?(在蟒蛇数字中)



在python库numpy中,是array([2,1])(1,2)还是(2,1)_(row,col)?

我在下面进行了 3 次尝试,但找不到答案。

import numpy as np
x = np.array([1,2])
y = np.array([[1,3,5], [2,4,6]])
z = np.array([[1,2],[3,4],[5,6]])
o = np.array([1,2,3])
print(np.dot(x,y))
print(np.dot(z,x))
print(np.dot(x,o))

第一个和第二个有效,但最后一个没有。错误是:-

ValueError: shapes (2,) and (3,) not aligned: 2 (dim 0) != 3 (dim 0)

在我看来, 在情况 1 中,x =(1 行和 2 列) 在情况 2 中,x =(2 行和 1 列) 在情况 3 中,x 应该是(2 行和 1 列),但它不起作用

请让我知道为什么会发生这种情况。

In [272]: x = np.array([1,2])
...: y = np.array([[1,3,5], [2,4,6]])
...: z = np.array([[1,2],[3,4],[5,6]])
...: o = np.array([1,2,3])
...: 
In [273]: x.shape
Out[273]: (2,)              # 1 element tuple
In [274]: y.shape
Out[274]: (2, 3)            # 2 element tuple
In [275]: z.shape
Out[275]: (3, 2)
In [276]: o.shape
Out[276]: (3,)

维度的行/列解释适合 2 个数组,如yz。 这与xo格格不入.

我们可以从x制作一个 2d 数组 ,有一个明确的行,2 列:

In [277]: x[None,:].shape
Out[277]: (1, 2)

但出于许多目的,(2,) 形状与 (1,2) 一样有效。

np.dot有关于如何处理 1D 数组的有据可查的规则。

基本规则是在 A 的最后一个暗角和 B 的第二个到最后一个暗点上执行乘积总和,并允许 1d。

x, y   (2,) with (2,3) => (3,)  (the 2's pair)
z, x   (3,2) with (2,) => (3,)  (the 2's pair)
x, o  (2,) with (3,)  no match!

A (n,2) 将与 (2,3) 点点以产生 (n,3) 结果。 同样,带有 (2,n) 的 (3,2) 产生 (3,n)。

这是学习numpy时的"黄金"规则:应用形状兼容性规则时,永远不要考虑行和列。

话虽如此,以下是np.dot(a,b)的形状兼容性规则(此处作为编号项目符号复制)

  1. 如果 a 和 b 都是一维数组,则它是向量的内积(没有复共轭)。
  2. 如果 a 和 b 都是二维数组,则它是矩阵乘法,但最好使用 matmul 或 @ b。
  3. 如果 a 或 b
  4. 是 0-D(标量),则等效于 乘法,最好使用 numpy.multiply(a, b) 或 a * b。
  5. 如果 a 是
  6. N-D 数组,b 是一维数组,则它是 a 和 b 最后一个轴上的和积。
  7. 如果 a 是 N-D 数组,b 是 M-D 数组(其中 M>=2),则它是 a 的最后一个轴和 b 的倒数第二个轴上的和积

(请注意,没有任何规则是用表示的。它们仅以数组的尺寸表示ab)

在我们的例子中:

x是一个具有2元素的一维数组(或"矢量")。

y是一个形状为(2,3)的二维数组。

z是一个形状为(3,2)的二维数组。

o是一个包含3元素的一维数组(或"矢量")。

对于np.dot(x,y),规则(5)适用。

对于np.dot(z,x),规则(4)适用。

对于np.dot(x,o),rule(1) 被尝试,但失败了,因为你不能用另一个3元素向量做一个2元素向量的内积。(两个向量需要具有相同数量的元素)

我不确定你的问题是什么,当你有 (X,) X 表示元素数量并且 (X,Y) 是 x 行和 Y 列

x.shape -> (2,) 2 elements
o.shape -> (3,) 3 elements
y.shape -> (2, 3) 2 rows 3 cols
z.shape -> (3, 2) 3 rows 2 cols

所以np.dot(x,o)会给你一个错误

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<__array_function__ internals>", line 6, in dot
ValueError: shapes (2,) and (3,) not aligned: 2 (dim 0) != 3 (dim 0)

最新更新