尝试将两个维数适当的numpy矩阵相乘时,Python返回错误

8yoxcaq7  于 2022-12-23  发布在  Python
关注(0)|答案(1)|浏览(125)

我的代码非常简单,但是当我尝试将一个3x 2和2x 1矩阵相乘时,我得到了以下错误(对我来说,这毫无意义):

ValueError: operands could not be broadcast together with shapes (3,2) (2,1)

在这个程序中,我做的第一件事是在域[-1,1] x [-1,1]中随机生成两个点,并使用变量slopey_int定义由这些点组成的直线,然后,我创建形式为{x_0,x_1,x_2}的N个随机x值,其中x_0总是1,x_1,x_2是在[-1,1]范围内随机生成的数,这N个值包括代码中的x_matrix
y_matrix是每个值x_1,...,x_N的分类。如果x_1在由slopey_int指定的随机线的右边,则y_1的值为+1,否则为-1。
现在,一旦指定了x_matrixy_matrix,我只想将x_matrix的伪逆(代码中为pinv_x)乘以y_matrix。这就是错误出现的地方。我已经无计可施了,我想不出有什么地方可能出错。
任何帮助是非常感谢。代码如下:

from numpy import *
import random

N = 2

# Determine target function f(x)                                                                                
x_1 = [random.uniform(-1,1),random.uniform(-1,1)]
x_2 = [random.uniform(-1,1),random.uniform(-1,1)]
slope = (x_1[1] - x_2[1]) / (x_1[0] - x_2[0])
y_int = x_1[1] - (slope * x_1[0])

# Construct training data.                                                                                       
x_matrix = array([1, random.uniform(-1,1), random.uniform(-1,1)])
x_on_line = (x_matrix[1] / slope) - (y_int / slope)
if x_matrix[1] >= x_on_line:
    y_matrix = array([1])
else:
    y_matrix = array([-1])

for i in range(N-1):
    x_val = array([1, random.uniform(-1,1), random.uniform(-1,1)])
    x_matrix = vstack((x_matrix, x_val))
    x_on_line = (x_val[1] / slope) - (y_int / slope)
    if x_val[1] >= x_on_line:
    y_matrix = vstack((y_matrix, array([1])))
    else:
        y_matrix = vstack((y_matrix, array([-1])))

pinv_x = linalg.pinv(x_matrix)
print y_matrix
print pinv_x
w =  pinv_x*y_matrix
qyuhtwio

qyuhtwio1#

您使用的是数组,而不是矩阵。要从数组中获得矩阵乘法,您需要使用dot()函数,而不是*。请参阅本页。当数据位于数组中时,*运算符是元素级乘法,因此形状必须完全匹配。

相关问题