x и y должны иметь одинаковое первое измерение, но иметь формы (50,) и (10,) - PullRequest
1 голос
/ 05 февраля 2020

Я хочу построить диаграмму с двумя массивами, но она не работает. Вывод говорит:

ValueError: x и y должны иметь одинаковое первое измерение, но иметь формы (50,) и (10,)

Спасибо вам большое !! !

import numpy as np
import matplotlib.pyplot as plt

p = float(input("Introduzca probabilidad de error de bit: "))
while p < 0 or p > 1:
     p = float(input("Introduzca probabilidad de error de bit: "))
n = int(input("Introduzca número de bits: "))
while n < 0:
     n = int(input("Introduzca número de bits: "))

q = 1-p
pexito = q**n
intentos = 1/pexito
print()
print("El número medio de intentos es:",intentos)
print()
print("La probabilidad de transmitir correctamente",n,"bits es:",pexito)

listapmf = []
listacdf = []

for i in range(n):
    pmf = (p**(n-1))*q
    listapmf.append(pmf)
for j in range(n):
    cdf = 1-(p**n)
    listacdf.append(cdf)

arraycdf = np.array(listacdf)
arraypmf = np.array(listapmf) 

x1 = np.linspace(0.0, n)
x2 = np.linspace(0.0, n)

plt.subplot(2, 1, 2)
plt.plot(x1, arraypmf, '.-')
plt.title('Intentos de transmisión en base a una probabilidad de error de bit')
plt.ylabel('PMF')

plt.subplot(2, 1, 1)
plt.plot(x2, arraycdf, '.-')
plt.xlabel('Intentos')
plt.ylabel('CDF')

plt.show()

1 Ответ

3 голосов
/ 05 февраля 2020

Как заявил Г. Андерсон, проблема в том, что вы пытаетесь построить 50 значений по оси x, используя только 10 значений по оси x. Проблема начинается, когда вы определяете x1 и x2. Значение по умолчанию для np.linspace() - это разделение значений, переданных на 50 значений. Я не уверен, что вы ожидаете, но, возможно, это сработает? (Функционально он работает на 100%, но не уверен, что вы намереваетесь использовать логи c)

Ошибка:

x1 = np.linspace(0.0, n) <-- Split values between 0 and n in 50 values
x2 = np.linspace(0.0, n) <-- Same

Изменить на:

x1 = np.linspace(0.0, 1, num = n)
x2 = np.linspace(0.0, 1, num = n)
...