Có chức năng numpy để phân chia mảng dọc theo trục với các phần tử từ mảng khác không? Ví dụ: giả sử tôi có một mảng a có hình dạng (l, m, n) và một mảng b có hình dạng (m,); Tôi đang tìm một cái gì đó tương đương với:phân chia theo chiều dọc theo trục
def divide_along_axis(a,b,axis=None):
if axis is None:
return a/b
c = a.copy()
for i, x in enumerate(c.swapaxes(0,axis)):
x /= b[i]
return c
Ví dụ, điều này rất hữu ích khi bình thường hóa một loạt các vectơ:
>>> a = np.random.randn(4,3)
array([[ 1.03116167, -0.60862215, -0.29191449],
[-1.27040355, 1.9943905 , 1.13515384],
[-0.47916874, 0.05495749, -0.58450632],
[ 2.08792161, -1.35591814, -0.9900364 ]])
>>> np.apply_along_axis(np.linalg.norm,1,a)
array([ 1.23244853, 2.62299312, 0.75780647, 2.67919815])
>>> c = divide_along_axis(a,np.apply_along_axis(np.linalg.norm,1,a),0)
>>> np.apply_along_axis(np.linalg.norm,1,c)
array([ 1., 1., 1., 1.])
không, bạn chưa có. phương thức đó không thành công, ví dụ với mảng 2-d mà tôi đưa ra làm ví dụ. khi nó quay ra, ví dụ tôi đưa cho bạn có thể làm c = a/np.apply_along_axis (np.linalg.norm, 1, a) [:, np.newaxis] nhưng tôi đang tìm một cái gì đó tổng quát hơn giống như hàm divide_along_axis() i định nghĩa trong câu hỏi. – user545424
Làm thế nào để chuyển đổi (xem câu trả lời đã chỉnh sửa)? Hoặc bạn có thể định nghĩa 'divide_along_axis' bằng cách transposing đầu tiên, chia, sau đó transposing trở lại. – Owen
Chỉ cần thêm trục mới vào mảng 1d của bạn. – tillsten