ValueError: x and и must have same first размер

Привет:

Я достаточно новый используя Пайтон и он практиковал со следующей проблемой:

Он хотел изобразить графически стоимость перенесения тепла через плату из алюминия (я старался делать само простой из-за простого факта практикования, как изображать графически оказанные в python).

import matplotlib.pyplot as plt


span_L = []                           #Initialize span
span_Q = []
Q= []
Delta_T = 100                        #Assuming delta T = 100 C
T_cond = (207 /100)                  #Aluminum thermal conductivity W/(cm K)
Area = 1                             #Assuming Area is 1 cm^2


for lenght in range (100):         #Loop that appends different values
  span_L.append(float(lenght))

print("Lenght (L) in centimeters: ", span_L)     #Shows the output of values

for span_L in range (1,101):
  Q =  (T_cond*Area*Delta_T/span_L)
  span_Q.append(float(Q))

print(span_Q)

plt.plot(span_L,span_Q)
plt.title("Heat transfer for different thichkness values in an Al plate")
plt.xlabel("Lenght in cm")
plt.ylabel("Heat transfer in Watts [W]")
plt.show()

Проблема, которая у меня есть, состоит в том, что у меня выходит ошибка: ValueError: x and y must have same first dimension и проверив длину обоих списков, у обоих есть та же длина.

1
задан 11.01.2017, 09:49
0 ответов

Проблема находится во втором цикле for, когда ты это делаешь:

for span_L in range (1,101):
    ...

Список span_L который ты создал заблаговременно, ты повторно распределяешь ее как целое число, стоимость которого меняется в течение цикла, оставаясь с конечной стоимостью 100. Поэтому, когда ты пробуешь изображать графически span_L vs span_Q он посылает тебе именно эту ошибку.

Чтобы это решать, ты можешь использовать вспомогательную переменную в цикле for, немного как:

import matplotlib.pyplot as plt

span_L = []                           #Initialize span
span_Q = []
Q= []
Delta_T = 100                        #Assuming delta T = 100 C
T_cond = (207 /100)                  #Aluminum thermal conductivity W/(cm K)
Area = 1                             #Assuming Area is 1 cm^2

for lenght in range (100):         #Loop that appends different values
  span_L.append(float(lenght))

print("Length (L) in centimeters: ", span_L)     #Shows the output of values

for _span_L in range (1,101):
  Q =  (T_cond*Area*Delta_T/_span_L)
  span_Q.append(float(Q))

plt.plot(span_L,span_Q)
plt.title("Heat transfer for different thickness values in an Al plate")
plt.xlabel("Length in cm")
plt.ylabel("Heat transfer in Watts [W]")
plt.show()

Хотя, поскольку я понимаю, я думаю, что ты мог бы уберегаться первый цикл и какие-то начальные определения таких списков как, например, список Q или span_L.

import matplotlib.pyplot as plt

span_Q = []                           #Initialize span
Delta_T = 100                        #Assuming delta T = 100 C
T_cond = (207 /100)                  #Aluminum thermal conductivity W/(cm K)
Area = 1                             #Assuming Area is 1 cm^2

span_L = range(1,101)

print("Length (L) in centimeters: ", span_L)     #Shows the output of values

for L in span_L:
  Q =  (T_cond*Area*Delta_T/L)
  span_Q.append(float(Q))

plt.plot(span_L,span_Q)
plt.title("Heat transfer for different thickness values in an Al plate")
plt.xlabel("Length in cm")
plt.ylabel("Heat transfer in Watts [W]")
plt.show()

Итак, подобно рекомендации, он предложил бы тебе использовать настоятельно NumPy, чтобы определять вектора, с которыми ты сможешь работать более удобным и работоспособным способом, например для тебя я вступаю в брак, код сократился бы в:

import matplotlib.pyplot as plt
import numpy as np

Delta_T = 100                        #Assuming delta T = 100 C
T_cond = (207/100)                  #Aluminum thermal conductivity W/(cm K)
Area = 1                             #Assuming Area is 1 cm^2

span_L = np.linspace(1,100)
span_Q = (T_cond*Area*Delta_T/span_L)

plt.plot(span_L,span_Q)
plt.title("Heat transfer for different thickness values in an Al plate")
plt.xlabel("Length in cm")
plt.ylabel("Heat transfer in Watts [W]")
plt.show()

Ты можешь консультировать больше информации, относительно как работы с Matplotlib+Numpy в Ссипи Лектуре Notes.

1
ответ дан 03.12.2019, 17:46
  • 1
    Muchí пропасти спасибо!!! Не sabí в который меня упрощал так код. В настоящее время я изучаю python благодаря тому, что уже ко всей моей работе в matlab, он не знал, что linspace tamvien оно функционировало здесь. Большое спасибо снова!!! –  11.01.2017, 17:49