[英]ValueError: x and y must have same first dimension, but have shapes (1, 2) and (2,)
[英]ValueError: x and y must have same first dimension, but have shapes
我想知道如何最好地解决我的脚本中的以下问题:“ValueError:x 和 y 必须具有相同的第一维,但具有形状 (1531,) 和 (1532,)”。
这里有什么问题? 问题是 plot 的 x 轴和 y 轴与 plot 共享的值(输入)数量不同。 结果是上面的错误消息。
我们先来看代码:
# Initialize
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
from matplotlib.pyplot import cm
# Numpy.loadtxt – Loads data from a textfile.
# Scipy.signal.welch – Creation of the power-spectrum via welch method. f, Welch creates the ideal frequencies (f, Welch = Power Spectrum or Power Spectral Density)
Subjects = ["Subject1" "Subject2"]
for Subject in Subjects:
Txt = np.loadtxt("/datadir.../{0}/filename...{0}.txt".format(Subject), comments="#", delimiter=None,
converters=None, skiprows=0, usecols=0, unpack=False, ndmin=0, encoding=None, max_rows=None, like=None)
f, Welch = signal.welch(Txt, fs=1.0, window="hann", nperseg=None, noverlap=None, nfft=3062, detrend="constant", return_onesided=True, scaling="density", axis=-1, average="mean")
BypassZero1 = f[f > 0.00000000000001] # Avoids "RuntimeWarning: divide by zero encountered in log"
BypassZero2 = Welch[Welch > 0.00000000000001]
Log_f = np.log(BypassZero1, out=BypassZero1, where=BypassZero1 > 0)
Log_Welch = np.log(BypassZero2, out=BypassZero2, where=BypassZero2 > 0)
plt.plot(Log_f, Log_Welch)
代码行“BypassZero1”和“BypassZero2”告诉 Python 对于“f”和“Welch”仅使用高于 0.00000000000001 的值。 否则,问题“RuntimeWarning:在 log 中遇到的除以零”将出现在我对两个轴(Log_f 和 Log_Welch)应用对数的以下步骤中。
这是代码的最后 plt.plot 行出现问题的地方。 在使用 Welch 方法并为两个轴应用对数的上一步之后,“f”和“Welch”似乎“剩余”了不同数量的数值。
我想知道是否有可能处理 .txt 文件中提供的 0.xxx 值。 目前,对于 f 和 Welch,仅使用高于 0.00000000000001 的值。 这将导致 x 和 y 的值数量不同,从而导致无法绘制数据。
有什么办法可以解决这个问题?
正如您所指出的,错误消息表明您的两个 arrays 的长度不同。 这是因为第二个数组的掩码应该与第一个数组的掩码相同。 因此,将BypassZero2 = Welch[Welch > 0.00000000000001]
替换为BypassZero2 = Welch[f > 0.00000000000001]
应该可以解决问题。
#Plot
plt.figure(figsize = (16,8))
plt.plot(anos, ratings)
plt.xlabel('\nAno')
plt.ylabel('Mediana de Avaliação')
plt.title('\nMediana de Avaliação dos Filmes Em Relação ao Ano de Estréia\n')
plt.show()
ValueError: x and y must have same first dimension, but have shapes.
基本上,我们正在绘制的 x 和 y 坐标必须具有相同的长度,以便我们可以确保它一对一地绘制。 因此,确保它们的长度相等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.