簡體   English   中英

ValueError:x 和 y 必須具有相同的第一維,但具有形狀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM