Python 3.x 将中的1D数组转换为Numpy中的行或列向量
我对数组和向量的NumPy概念感到困惑,假设我们有一个一维数组,如下所示。从“形状”方法中,我可以看到尺寸<代码>(10,)表示一个包含10个元素的维度Python 3.x 将中的1D数组转换为Numpy中的行或列向量,python-3.x,numpy,Python 3.x,Numpy,我对数组和向量的NumPy概念感到困惑,假设我们有一个一维数组,如下所示。从“形状”方法中,我可以看到尺寸(10,)表示一个包含10个元素的维度 a = np.arange(10) print(a) a.shape [0 1 2 3 4 5 6 7 8 9] (10,) 现在我了解了一种称为np.newaxis的方法,它可以将数组转换为行向量。所以我想知道,在NumPy中,我们是否假设行或列向量总是二维的?(我认为在线性代数中,向量可以存在于任何维度,或者当我们提到“维度”时,NumPy和线
a = np.arange(10)
print(a)
a.shape
[0 1 2 3 4 5 6 7 8 9]
(10,)
现在我了解了一种称为np.newaxis
的方法,它可以将数组转换为行向量。所以我想知道,在NumPy中,我们是否假设行或列向量总是二维的?(我认为在线性代数中,向量可以存在于任何维度,或者当我们提到“维度”时,NumPy和线性代数在概念上存在差异?)。因为向量是通过调用np.newaxis
添加1维来转换的
print(a[np.newaxis:])
print(a[np.newaxis,:].shape)
[0 1 2 3 4 5 6 7 8 9]
(1, 10)
请注意,维度单词在不同的上下文中可能有不同的含义。例如,在线性代数中,(1,1)是二维空间中的向量,(1,1,1)是三维空间中的向量,它们都是编程语言中的一维数组。三维向量的集合在线性代数中是矩阵,在编程语言中是二维数组 就线性代数而言,形状(10,)是10维向量或10个标量值。形状(10,2)是2个10维向量或10个2维向量
让我们考虑线性代数矩阵乘法公式:
AB(i,j) = sum(A[i,k] * B[k,j])
如果我们假设行向量是维数为(1,N)的矩阵,列向量是维数为(N,1)的矩阵,则此公式对向量仍然有效
NumPy使用相同的方法。但是NumPy不仅允许二维数组,还允许一维、三维等等。这种阵列对于其他计算模型很有用。如果你对此感兴趣,你可以阅读更多关于张量的内容
您可以使用.reformate(…)
方法重新排列ndarray
的元素。更改数组的形状时,所有元素都保留在原来的位置,但元素的地址会更改
如果我们假设行向量和列向量是特殊的对象,我们将被迫使计算规则复杂化,这是非常不切实际的。如果要重塑数组,您应该使用:
new_数组=np.重塑(旧_数组,(-1,2))
其中-1是给定数组大小的新数组大小。只需运行以下命令:
a.reshape(-1,1)
在
numpy
docs中,您在哪里看到了row vector
矢量也不是标准的。ndarray
具有ndim
维度,可以是0,1,2(最多32个)。很多来自MATLAB或线性代数背景的人来到numpy
时,都会被任何没有二维(行和列)的东西弄糊涂。(10,),(1,10),(10,1)都是包含10个元素的数组形状。但(1,10,1,1)和(2,5)也是如此。您可以使用重塑@Flying pig获得任何形状。问题是关于术语维度还是关于更改ndarray
的形状?