Hướng dẫn can only convert an array of size 1 to a python scalar in pytorch? - chỉ có thể chuyển đổi một mảng có kích thước 1 thành một vô hướng python trong pytorch?

Tôi muốn lặp qua các hàng của một khung dữ liệu, trong trường hợp của tôi để tính toán xếp hạng sức mạnh cho một số đội thể thao.

Các cột DataFrame 'home_elo''away_elo' chứa xếp hạng cường độ trước trận đấu (điểm ELO) của các đội liên quan và được cập nhật trong hàng trận đấu trên sân nhà / sân khách tiếp theo sau trận đấu (mỗi đội có hai xếp hạng sức mạnh tại bất kỳ thời điểm nào, theo bất kỳ thời điểm nào, theo thời gian, cho các trò chơi tại nhà và sân khách), với những gì update_elo(a,b,c) trở lại.

Đoạn mã mã tương ứng trông như sau:

for index in df.index:

    counter = counter + 1
    # Calculation of post-match ELO scores for home and away teams
    if df.at[index,'updated'] == 2: # Update next match ELO scores if not yet updated but pre-match ELO scores available

        try:
            all_home_fixtures = df.date_rank[df['localteam_id'] == df.at[index,'localteam_id']]
            next_home_fixture = all_home_fixtures[all_home_fixtures > df.at[index,'date_rank']].min()
            next_home_index = df[(df['date_rank'] == next_home_fixture) & (df['localteam_id'] == df.at[index,'localteam_id'])].index.item()
        except ValueError:
            print('ERROR 1 at' + str(index))
            df.at[index,'updated'] = 4

        try:
            all_away_fixtures = df.date_rank[df['visitorteam_id'] == df.at[index,'visitorteam_id']]
            next_away_fixture = all_away_fixtures[all_away_fixtures > df.at[index,'date_rank']].min()
            next_away_index = df[(df['date_rank'] == next_away_fixture) & (df['visitorteam_id'] == df.at[index,'visitorteam_id'])].index.item()
        except ValueError:
            print('ERROR 2 at' + str(index))
            df.at[index,'updated'] = 4

        # print('Current: ' + str(df.at[index,'fixture_id']) + '; Followed by: ' + str(next_home_fixture))
        # print('Current date rank: ' + str(df.at[index,'date']) + ' ' + str(df.at[index,'date_rank']) + '; Next home date rank: ' + str(df.at[next_home_index,'date_rank']) + '; Next away date rank: ' + str(df.at[next_away_index,'date_rank']))

        df.at[next_home_index, 'home_elo'] = update_elo(df.at[index,'home_elo'],df.at[index,'away_elo'],df.at[index,'actual_score'])
        df.at[next_away_index, 'away_elo'] = update_elo(df.at[index,'away_elo'],df.at[index,'home_elo'],1 - df.at[index,'actual_score']) # Swap function inputs for away team


        df.at[next_home_index, 'updated'] = df.at[next_home_index, 'updated'] + 1
        df.at[next_away_index, 'updated'] = df.at[next_away_index, 'updated'] + 1

        df.at[index,'updated'] = 3

Mã hoạt động tốt cho vài hàng đầu tiên. Tuy nhiên, tôi sau đó gặp phải lỗi, luôn luôn cho cùng một hàng, mặc dù tôi không thể thấy các hàng sẽ khác với các hàng khác như thế nào.

  1. Nếu tôi không xử lý ValueError như được hiển thị ở trên, tôi nhận được thông báo lỗi ValueError: can only convert an array of size 1 to a Python scalar lần đầu tiên sau khoảng 250 hàng.
  2. Nếu tôi xử lý ValueError như được hiển thị ở trên, tôi đã bắt được bốn lỗi như vậy, hai cho mỗi khối xử lý lỗi (mã hoạt động tốt), nhưng mã sẽ ngừng cập nhật bất kỳ xếp hạng cường độ nào sau khoảng 18% của tất cả các hàng, mà không cần ném bất kỳ thông báo lỗi nào.

Tôi rất đánh giá cao nó nếu bạn có thể giúp tôi (a) hiểu nguyên nhân gây ra lỗi và (b) cách xử lý chúng.

Vì đây là bài viết đầu tiên của tôi về Stackoverflow, tôi vẫn chưa nhận thức đầy đủ về các hoạt động đăng bài phổ biến của diễn đàn. Xin vui lòng cho tôi biết nếu có bất cứ điều gì tôi có thể cải thiện về bài viết của mình.

Cám ơn rất nhiều!


Một lỗi bạn có thể gặp phải khi sử dụng Python là:

TypeError: only size-1 arrays can be converted to Python scalars

Lỗi này xảy ra thường xuyên nhất khi bạn cố gắng sử dụng np.int () để chuyển đổi một mảng giá trị float numpy thành một mảng các giá trị số nguyên.np.int() to convert a NumPy array of float values to an array of integer values.

Tuy nhiên, hàm này chỉ chấp nhận một giá trị duy nhất thay vì một mảng các giá trị.

Thay vào đó, bạn nên sử dụng X.Asype (int) để chuyển đổi một mảng giá trị nổi thành một mảng các giá trị số nguyên vì hàm này có thể chấp nhận một mảng.x.astype(int) to convert a NumPy array of float values to an array of integer values because this function is able to accept an array.

Ví dụ sau đây cho thấy cách khắc phục lỗi này trong thực tế.

Cách tái tạo lỗi

Giả sử chúng ta tạo ra mảng giá trị nổi sau đây:

import numpy as np

#create NumPy array of float values
x = np.array([3, 4.5, 6, 7.7, 9.2, 10, 12, 14.1, 15])

Bây giờ giả sử chúng ta cố gắng chuyển đổi mảng giá trị float này thành một mảng các giá trị số nguyên:

#attempt to convert array to integer values
np.int(x)

TypeError: only size-1 arrays can be converted to Python scalars 

Chúng tôi nhận được một kiểu mẫu vì hàm np.int () chỉ chấp nhận các giá trị đơn, không phải là một mảng các giá trị.TypeError because the np.int() function only accepts single values, not an array of values.

Cách khắc phục lỗi

Để chuyển đổi một mảng giá trị nổi thành giá trị số nguyên, thay vào đó chúng ta có thể sử dụng mã sau:

#convert array of float values to integer values
x.astype(int)

array([ 3,  4,  6,  7,  9, 10, 12, 14, 15])

Lưu ý rằng mảng các giá trị đã được chuyển đổi thành các số nguyên và chúng tôi không nhận được bất kỳ lỗi nào vì hàm ASTYPE () có thể xử lý một mảng các giá trị.astype() function is able to handle an array of values.

Lưu ý: Bạn có thể tìm thấy tài liệu đầy đủ cho hàm ASTYPE () ở đây.: You can find the complete documentation for the astype() function here.

Tài nguyên bổ sung

Các hướng dẫn sau đây giải thích cách khắc phục các lỗi phổ biến khác trong Python:

Cách sửa KeyError trong Pandas Cách sửa: ValueError: Không thể chuyển đổi Float Nan thành Integer Cách sửa: ValueError: Toán tử không thể được phát cùng với các hình dạng
How to Fix: ValueError: cannot convert float NaN to integer
How to Fix: ValueError: operands could not be broadcast together with shapes

Làm cách nào để sửa lỗi chỉ có thể chuyển đổi các mảng kích thước 1 thành vô hướng Python?

Có hai giải pháp chung để sửa lỗi "TypeError: Chỉ có thể chuyển đổi các mảng kích thước-1 thành lỗi vô hướng Python" ...
Giải pháp số 1 - Sử dụng NP.hàm vectorize ().....
Giải pháp #2 - Sử dụng hàm Map ().....
Giải pháp số 3 - Sử dụng phương thức ASTYPE () ..

Làm thế nào để bạn chuyển đổi một mảng thành một danh sách trong Python?

mảng] các đối tượng có thể được chuyển đổi thành một danh sách với hàm Tolist ().Hàm Tolist () không chấp nhận bất kỳ đối số nào.Nếu mảng là một chiều, một danh sách với các phần tử mảng được trả về.Đối với một mảng đa chiều, một danh sách lồng nhau được trả về.with the tolist() function. The tolist() function doesn't accept any arguments. If the array is one-dimensional, a list with the array elements is returned. For a multi-dimensional array, a nested list is returned.

Vô hướng Python là gì?

Trong Numpy, một vô hướng là bất kỳ đối tượng nào bạn đặt trong một mảng.Nó tương tự như khái niệm trong đại số tuyến tính, một yếu tố của một trường được sử dụng để xác định không gian vectơ.Numpy đảm bảo tất cả các vô hướng trong một mảng có giống nhau.Không thể một vô hướng có loại Int32, các vô hướng khác có loại Int64.any object that you put in an array. It's similar to the concept in linear algebra, an element of a field which is used to define a vector space. NumPy ensures all scalars in an array have same types. It's impossible one scalar having type int32, the other scalars having type int64.