ValueError: x and y must have same first dimension, but have shapes
ValueError: x and y must have same first dimension, but have shapes
我想知道如何最好地解决我的脚本中的以下问题:“ValueError:x 和 y 必须具有相同的第一维,但具有形状 (1531,) 和 (1532,)”。
这里有什么问题?问题是绘图的 x 轴和 y 轴不共享完全相同数量的值(输入)来绘图。结果就是上面的错误信息。
先看代码:
# 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: divide by zero encountered in log”将出现在我对两个轴(Log_f 和 Log_Welch)应用对数的后续步骤中。
这是代码的最后 plt.plot 行出现问题的地方。在上一步使用 Welch 方法并对两个轴应用对数之后,“f”和“Welch”似乎“剩下”了不同数量的数值。
我想知道是否可以处理 .txt 文件中提供的 0.xxx 值。目前,f 和 Welch 仅使用大于 0.00000000000001 的值。这将导致 x 和 y 的值数量不同,从而导致无法绘制数据。
这个问题的解决方案是什么?
正如您所指出的,错误消息表明您的两个数组长度不同。这是因为第二个数组的掩码应该与第一个数组的掩码相同。因此,将 BypassZero2 = Welch[Welch > 0.00000000000001]
替换为 BypassZero2 = Welch[f > 0.00000000000001]
应该可以解决问题。
我想知道如何最好地解决我的脚本中的以下问题:“ValueError:x 和 y 必须具有相同的第一维,但具有形状 (1531,) 和 (1532,)”。
这里有什么问题?问题是绘图的 x 轴和 y 轴不共享完全相同数量的值(输入)来绘图。结果就是上面的错误信息。
先看代码:
# 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: divide by zero encountered in log”将出现在我对两个轴(Log_f 和 Log_Welch)应用对数的后续步骤中。
这是代码的最后 plt.plot 行出现问题的地方。在上一步使用 Welch 方法并对两个轴应用对数之后,“f”和“Welch”似乎“剩下”了不同数量的数值。
我想知道是否可以处理 .txt 文件中提供的 0.xxx 值。目前,f 和 Welch 仅使用大于 0.00000000000001 的值。这将导致 x 和 y 的值数量不同,从而导致无法绘制数据。
这个问题的解决方案是什么?
正如您所指出的,错误消息表明您的两个数组长度不同。这是因为第二个数组的掩码应该与第一个数组的掩码相同。因此,将 BypassZero2 = Welch[Welch > 0.00000000000001]
替换为 BypassZero2 = Welch[f > 0.00000000000001]
应该可以解决问题。