gpt4 book ai didi

python - 二维数组和一维数组的点积不同于矩阵和一维数组

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:05 26 4
gpt4 key购买 nike

我使用了 numpy dot函数计算二维和一维数组的乘积。我注意到当二维数组的类型为 matrix 时而一维数组的类型是 ndarraydot 函数返回的结果与我向它传递 ndarray 类型的二维数组时的结果不同。

问题:为什么结果不同?

简短示例

import numpy as np
a=[[1,2],
[3,4],
[5,6]]
e=np.array([1,2])
b=np.array(a)
print("Ndarrray:%s"%(type(b)))
print(b)
print("Dim of ndarray %d"%(np.ndim(b)))
be=np.dot(b,e)
print(be)
print("Dim of array*array %d\n"%(np.ndim(be)))

c=np.mat(a)
print("Matrix:%s"%(type(c)))
print(c)
print("Dim of matrix %d"%(np.ndim(c)))
ce=np.dot(c,e)
print(ce)
print("Dim of matrix*array %d"%(np.ndim(ce)))
Ndarrray:<class 'numpy.ndarray'>
[[1 2]
[3 4]
[5 6]]
Dim of ndarray 2
[ 5 11 17]
Dim of array*array 1

Matrix:<class 'numpy.matrix'>
[[1 2]
[3 4]
[5 6]]
Dim of matrix 2
[[ 5 11 17]]
Dim of matrix*array 2

最佳答案

首先,对于矩阵类:

Note:
It is no longer recommended to use this class, even for linear algebra. Instead use regular arrays. The class may be removed in the future.

https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html

那是因为点积中的第一个元素是矩阵类型,因此您会收到一个矩阵作为输出。但是,如果您使用 shape 方法 来获取矩阵的“实际”大小,您会得到一个连贯的结果:

import numpy as np
a=[[1,2],
[3,4],
[5,6]]
e=np.array([1,2])
b=np.array(a)
print("Ndarrray:%s"%(type(b)))
print(b)
print("Dim of ndarray %d"%(np.ndim(b)))
be=np.dot(b,e)
print(be)
print("Dim of array*array %d\n"%(np.ndim(be)))

c=np.mat(a)
print("Matrix:%s"%(type(c)))
print(c)
print("Dim of matrix %d"%(np.ndim(c)))
ce=np.dot(c,e)
print(ce)
print("Dim of matrix*array %d"%(np.ndim(ce)))
print("Dim of matrix*array ",(ce.shape)) # -> ('Dim of matrix*array ', (1, 3))
print(type(ce)) # <class 'numpy.matrixlib.defmatrix.matrix'>

你有一个形状为 (1,3) 的矩阵,它实际上是一个向量(dim 1,因为你有 1 行和 3 列)

基本上,要获取矩阵实例的维度,您应该使用 shape,而不是 ndim

为了更清楚,如果您定义一个空矩阵,您将默认获得 2 个暗淡的矩阵:

c=np.mat([])
print(c.ndim) # 2

可能它是这样设计的,因为当我们至少有 2-dims 时我们开始谈论矩阵

关于python - 二维数组和一维数组的点积不同于矩阵和一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58342914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com