Tôi đã mong đợi np.fromfunction(lambda i: 1, (4,), dtype=int)
để trả về array([1, 1, 1, 1])
, nhưng trả về số nguyên 1
thay thế. Ai đó có thể giải thích cho tôi tại sao numpy.fromfunction hoạt động theo cách đó? Dường như nó có liên quan đến định nghĩa của hàm ẩn danh (tức là, một tham số của hàm này có thực sự được sử dụng) hay không.Kết quả không mong đợi - kết quả không chính xác với chức năng liên tục
>>> import numpy as np
>>> np.fromfunction(lambda i: i, (4,), dtype=int)
array([0, 1, 2, 3])
>>> np.fromfunction(lambda i: 1, (4,), dtype=int)
1
>>> np.fromfunction(lambda i: 1 + i*0, (4,), dtype=int)
array([1, 1, 1, 1])
EDIT: để làm rõ, mục tiêu cuối cùng của tôi không phải là tạo ra array([1, 1, 1, 1])
sử dụng phương pháp này. Thay vào đó, tôi đang thực hiện cuộc gọi của biểu mẫu
np.fromfunction(lambda i: **an expression that doesn't depend on i**, (n,))
Nói cách khác, tôi đang cố gắng khởi tạo mảng nhiều lần bằng cách liên tục thực hiện cuộc gọi đến một số chức năng. (Có một cuộc gọi đến np.random.random() trong hàm đó vì vậy tôi không thực hiện cuộc gọi không cần thiết.)
Nếu biểu thức không phụ thuộc vào 'i', tôi nghi ngờ bạn có thể thay thế việc sử dụng' a = np.fromfunction (lambda i: ** một biểu thức không phụ thuộc vào i **, (n,)) 'với một cái gì đó như' a = ** một biểu thức không phụ thuộc vào i ** ', và trong biểu thức, sử dụng một cái gì đó như' np.ones (n) ',' np.arange (n) ', vv, để có biểu thức tạo một mảng có kích thước phù hợp. –
@WarrenWeckesser Tôi không chắc tôi hiểu. Liệu phương thức của bạn có hoạt động ngay cả khi có một lệnh gọi 'np.random.random()' bên trong '** một biểu thức không phụ thuộc vào i **'? –
Bạn có thể sử dụng đối số 'size' của' np.random.random'. Nếu biểu thức của bạn là, '4 * u ** 2 + 1' trong đó 'u' là ngẫu nhiên, bạn có thể viết' a = 4 * np.random.ngẫu nhiên (size = n) ** 2 + 1'. –