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
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.
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ã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
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