我想知道为什么相同的代码在Spyder和Pycharm中运行方式不同?它显示了Spyder中的图形,但它在Pycharm中没有。虽然存在相同的错误,但结果却不同。 我不知道如何处理它,我在stackoverflow中寻找答案,答案都说x和y的长度不同,但我不知道如何在我的例子中纠正。
import numpy as np
from numpy.linalg import inv
import matplotlib.pyplot as plt
np.random.seed(1)
N = 30
mean = (1, 2)
cov = [[1.8, 0], [0, 1.8]]
x1 = np.random.multivariate_normal(mean, cov, N)
mean = (2, 1)
x2 = np.random.multivariate_normal(mean, cov, N)
x12 = np.concatenate((x1, x2), axis=0)
mean = (1, -1)
x3 = np.random.multivariate_normal(mean, cov, N)
mean = (1.5, -1.5)
x4 = np.random.multivariate_normal(mean, cov, N)
x34 = np.concatenate((x3, x4), axis=0)
plt.plot(x12[:, 0], x12[:, 1], 'o', color='b')
plt.plot(x34[:, 0], x34[:, 1], 'o', color='r')
X = np.concatenate((x12, x34), axis=0)
X_1 = np.concatenate((np.ones((120, 1)), X), axis=1)
y = np.ones(2*N)
y = np.concatenate((y, 0*y), axis=0)
beta = np.dot(inv(np.dot(X_1.transpose(), X_1)),
np.dot(X_1.transpose(), y))
intercept = beta[0] # beta_0
coef = beta[:1] # beta_1 and beta_2
# Calculate RSS
rss = np.dot(y - np.dot(X_1, beta), y - np.dot(X_1, beta))
print("\nThe estimated model parameters are")
print(intercept)
print(coef)
print(rss)
p1x = -3 # Left x limit
p2x = 6 # Right x Limit
p1y = (0.5 - beta[0] - beta[1]*p1x)/beta[2] # Y value at p1x (left)
p2y = (0.5 - beta[0] - beta[1]*p2x)/beta[2] # Y value at p2x (right)
Pts = np.array([[p1x, p1y], [p2x, p2y]])
# Now draw the boundary
plt.plot(Pts[:, 0], Pts[:1], '_', color='black')
感谢你们的关注。以下答案确实解决了我发布的错误,但我仍然无法在Pycharm中获取任何图表。我已经尝试过添加" plt.show()"最后,但它不起作用。我在控制台中得到以下结果:
The estimated model parameters are
0.394336889526
[ 0.39433689]
15.2577282371
答案 0 :(得分:1)
Pts
是一个形状为(2,2)的数组。从此数组中,您可以按Pts[:, 0]
选择第一列,按Pts[:1]
选择第一列。然而形状是不同的。虽然Pts[:, 0]
是一维数组,但Pts[:1]
是一个二维数组(尽管只填充了一个维度。
由于从问题中不清楚这是什么目的,我不得不猜测实际上你想要在第一列中再次绘制数组的第二列,这将使用{{1 }}
Pts[:,1]