Hướng dẫn what does it mean only size 1 arrays can be converted to python scalars? - nó có nghĩa là gì chỉ có các mảng kích thước 1 có thể được chuyển đổi thành vô hướng python?

83

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi có mã python như vậy:

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return np.int(x)

x = np.arange(1, 15.1, 0.1)
plt.plot(x, f(x))
plt.show()

Và lỗi đó:

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

Làm thế nào tôi có thể sửa chữa nó?

Hỏi ngày 17 tháng 4 năm 2016 lúc 18:21Apr 17, 2016 at 18:21

Hướng dẫn what does it mean only size 1 arrays can be converted to python scalars? - nó có nghĩa là gì chỉ có các mảng kích thước 1 có thể được chuyển đổi thành vô hướng python?

Lỗi "Chỉ có thể chuyển đổi các mảng độ dài-1 thành vô hướng Python" được nâng lên khi hàm này mong đợi một giá trị duy nhất nhưng bạn vượt qua một mảng thay thế.

np.int là bí danh cho int tích hợp, được không phản đối trong V1.20 Numpy. Đối số cho INT nên là một vô hướng và nó không chấp nhận các đối tượng giống như mảng. Nói chung, nếu bạn muốn áp dụng một hàm cho từng phần tử của mảng, bạn có thể sử dụng np.vectorize:

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return int(x)
f2 = np.vectorize(f)
x = np.arange(1, 15.1, 0.1)
plt.plot(x, f2(x))
plt.show()

Bạn có thể bỏ qua định nghĩa của f (x) và chỉ cần chuyển hàm int cho hàm vectorize:

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

Lưu ý rằng np.vectorize chỉ là một hàm tiện lợi và về cơ bản là một vòng lặp. Điều đó sẽ không hiệu quả so với các mảng lớn. Bất cứ khi nào bạn có khả năng, hãy sử dụng các hàm hoặc phương thức thực sự được vector hóa (như

TypeError: only length-1 arrays can be converted to Python scalars
3 như @FFT gợi ý).

Đã trả lời ngày 17 tháng 4 năm 2016 lúc 18:32Apr 17, 2016 at 18:32

Ayhanayhanayhan

66.6K17 Huy hiệu vàng173 Huy hiệu bạc192 Huy hiệu Đồng17 gold badges173 silver badges192 bronze badges

5

Sử dụng:

x.astype(int)

Đây là tài liệu tham khảo.

Đã trả lời ngày 20 tháng 2 năm 2017 lúc 17:26Feb 20, 2017 at 17:26

FftfftFFT

7997 Huy hiệu bạc14 Huy hiệu Đồng7 silver badges14 bronze badges

1

TypeError: only length-1 arrays can be converted to Python scalars
4 nên giải quyết điều này. Về cơ bản, nó thay đổi cột DataFrame thành một danh sách.

Hướng dẫn what does it mean only size 1 arrays can be converted to python scalars? - nó có nghĩa là gì chỉ có các mảng kích thước 1 có thể được chuyển đổi thành vô hướng python?

Suraj Rao

29.2k11 Huy hiệu vàng95 Huy hiệu bạc102 Huy hiệu đồng11 gold badges95 silver badges102 bronze badges

Đã trả lời ngày 10 tháng 2 năm 2021 lúc 6:21Feb 10, 2021 at 6:21

Hướng dẫn what does it mean only size 1 arrays can be converted to python scalars? - nó có nghĩa là gì chỉ có các mảng kích thước 1 có thể được chuyển đổi thành vô hướng python?

Hãy lưu ý những gì được in cho

TypeError: only length-1 arrays can be converted to Python scalars
5. Bạn đang cố gắng chuyển đổi một mảng (về cơ bản chỉ là một danh sách) thành một int.
TypeError: only length-1 arrays can be converted to Python scalars
6 sẽ là một mảng của một số duy nhất, mà tôi cho rằng Numpy chỉ coi là một chiếc phao. Bạn có thể làm điều này, nhưng đó không phải là một giải pháp hoàn toàn độc hại.

EDIT: Tôi đã tham gia vào một bài đăng một vài tuần trước, nơi Numpy chậm hơn một hoạt động so với tôi mong đợi và tôi nhận ra rằng tôi đã rơi vào một suy nghĩ mặc định rằng Numpy luôn là cách để đi theo tốc độ. Vì câu trả lời của tôi không sạch sẽ như của Ayhan, tôi nghĩ rằng tôi sẽ sử dụng không gian này để cho thấy rằng đây là một trường hợp khác để minh họa rằng

TypeError: only length-1 arrays can be converted to Python scalars
7 chậm hơn khoảng 10% so với xây dựng danh sách ở Python. Tôi không biết đủ về Numpy để giải thích tại sao đây là trường hợp nhưng có lẽ ai đó làm?

import numpy as np
import matplotlib.pyplot as plt
import datetime

time_start = datetime.datetime.now()

# My original answer
def f(x):
    rebuilt_to_plot = []
    for num in x:
        rebuilt_to_plot.append(np.int(num))
    return rebuilt_to_plot

for t in range(10000):
    x = np.arange(1, 15.1, 0.1)
    plt.plot(x, f(x))

time_end = datetime.datetime.now()

# Answer by ayhan
def f_1(x):
    return np.int(x)

for t in range(10000):
    f2 = np.vectorize(f_1)
    x = np.arange(1, 15.1, 0.1)
    plt.plot(x, f2(x))

time_end_2 = datetime.datetime.now()

print time_end - time_start
print time_end_2 - time_end

Đã trả lời ngày 17 tháng 4 năm 2016 lúc 18:30Apr 17, 2016 at 18:30

Roganjoshroganjoshroganjosh

Huy hiệu vàng 12k44 gold badges29 silver badges44 bronze badges

Trong trường hợp này, đầu ra phải là một giá trị int tròn.

import numpy as np

arr = np.array([2.34, 2.56, 3.12])
output = np.round(arr).astype(int)

print(output)
# array([2, 3, 3])

Đã trả lời ngày 11 tháng 8 năm 2021 lúc 9:32Aug 11, 2021 at 9:32

Hướng dẫn what does it mean only size 1 arrays can be converted to python scalars? - nó có nghĩa là gì chỉ có các mảng kích thước 1 có thể được chuyển đổi thành vô hướng python?

Niek Tuytelniek Tuytelniek tuytel

7816 Huy hiệu bạc17 Huy hiệu đồng6 silver badges17 bronze badges

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return np.array(list(map(np.int, x)))

x = np.arange(1, 15.1, 0.1)
plt.plot(x, f(x))
plt.show()

Sử dụng NP.Array (Danh sách (MAP (NP.INT, X))) sẽ hội tụ mảng Numpy thành giá trị tỷ lệ và khắc phục sự cố để biết thêm chi tiết, hãy truy cập bài viết chi tiết này.

Đã trả lời ngày 22 tháng 2 lúc 13:58Feb 22 at 13:58

Hướng dẫn what does it mean only size 1 arrays can be converted to python scalars? - nó có nghĩa là gì chỉ có các mảng kích thước 1 có thể được chuyển đổi thành vô hướng python?

Những gì chỉ có thể chuyển đổi các mảng kích thước 1 thành vô hướng Python?

Có thể chuyển đổi các mảng "Kiểu hàng: Chỉ có thể chuyển đổi các mảng Kích thước-1 thành lỗi Python Scalar" khi chúng ta chuyển trong một mảng sang một phương thức chỉ chấp nhận một tham số. Mã ở trên ném "Mảng kích thước-1 có thể được chuyển đổi thành lỗi vô hướng Python" vì chúng tôi đã chuyển mảng y sang phương thức numpy int ().raised when we pass in an array to a method that accepts only one parameter. The code above throws the "TypeError: only size-1 arrays can be converted to Python scalars" error because we passed the y array to the NumPy int() method.

Một mảng một kích thước trong Python là gì?

Chỉ lỗi mảng kích thước 1 là một kiểu mẫu được kích hoạt khi bạn nhập một mảng làm tham số trong hàm hoặc phương thức chấp nhận một giá trị vô hướng duy nhất.Nhiều chức năng có các phương pháp xử lý lỗi sẵn có để tránh các chương trình gặp sự cố và xác nhận các đầu vào được đưa ra cho chức năng.a TypeError that gets triggered when you enter an array as a parameter in a function or method which accepts a single scalar value. Many functions have inbuilt error handling methods to avoid crashing programs and validate the inputs given for the function.

Mảng vô hướng trong Python là gì?

Scalar Array có các thuộc tính và phương thức tương tự như ndarrays..Các Scalar Array sống trong một hệ thống phân cấp (xem hình bên dưới) của các loại dữ liệu.allows one to treat items of an array partly on the same footing as arrays, smoothing out rough edges that result when mixing scalar and array operations. Array scalars live in a hierarchy (see the Figure below) of data types.

Kích thước của một mảng có thể được thay đổi trong Python không?

Với sự trợ giúp của numpy numpy.resize (), chúng ta có thể thay đổi kích thước của một mảng. resize(), we can resize the size of an array.