簡體   English   中英

ValueError: x 和 y 必須具有相同的第一維,但具有形狀 (50,) 和 (1, 50)/ 多處理

[英]ValueError: x and y must have same first dimension, but have shapes (50,) and (1, 50)/ Multiprocessing

我是多處理和繪圖的新手,所以我希望編寫一個可以多處理一系列高度的代碼,以通過方程獲得每個高度的最佳發射角度,然后是 plot 結果。

我的主要問題是在嘗試 plot 結果時遇到錯誤。 我的次要問題是通過調查我的代碼一段時間,現在我開始認為多進程是多余的? 我仍然希望使用多進程。 因此,對此的任何幫助也將不勝感激。

當我不希望 plot 結果時,該等式似乎工作正常。 但是當我嘗試 plot 時,我得到“ValueError:x 和 y 必須具有相同的第一維,但具有形狀 (50,) 和 (1, 50)”,我並不完全理解。 我以為他們都只是50的范圍?

我已經搞砸了一段時間試圖讓它工作。 我相信它在“list_h = np.array(range(1))”行中,因為它看起來不正確。 但如果我增加它,這個范圍似乎只是重復結果。 導致我認為我對這個多進程的結構很差。

我的代碼如下

import numpy as np
from multiprocessing import Pool
import matplotlib.pyplot as plt

def f(x):
    speed = 5
    ran0 = (speed*speed)/9.8
    array_hght = np.array(range(50))
    return ((np.arccos(array_hght/(array_hght+ran0)))/2)*(180/np.pi)

if __name__ == '__main__':
    with Pool(5) as p:
        list_h = np.array(range(1))
        list_angles = p.map(f, list_h)
        print(list_angles)
        array_h = np.array(range(50))
        plt.plot(array_h, list_angles)
        plt.show()

任何幫助是極大的贊賞:)。

您快到了!! pool.map()方法通過將f應用於給定輸入(在本例中為list_h )以列表形式返回結果。 由於list_h只有一項,因此結果將是一個只有一個值的列表。

因此,您需要做的就是從list_angles中獲取第一個元素,如下所示:

if __name__ == '__main__':
    with Pool(5) as p:
        list_h = np.array(range(1))
        list_angles = p.map(f, list_h)[0]    #<--- HERE
        array_h = np.array(range(50))
        print(array_h.shape)
        plt.plot(array_h, list_angles)
        plt.show()

運行前面的代碼會得到下圖: 在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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