Hướng dẫn how do you shift elements in a matrix in python? - làm thế nào để bạn chuyển các phần tử trong một ma trận trong python?
116 Show
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. Câu hỏi này chứa câu trả lời của riêng nó ở phía dưới. Sử dụng các mảng preallrocated. Theo sau câu hỏi này nhiều năm trước, có chức năng "thay đổi" kinh điển trong Numpy không? Tôi không thấy bất cứ điều gì từ tài liệu. Đây là một phiên bản đơn giản của những gì tôi đang tìm kiếm:
Sử dụng điều này giống như:
Câu hỏi này xuất phát từ nỗ lực của tôi để viết một sản phẩm nhanh chóng ngày hôm qua. Tôi cần một cách để "thay đổi" một sản phẩm tích lũy và tất cả những gì tôi có thể nghĩ là sao chép logic trong 1.Vì vậy, 2 nhanh hơn nhiều so với 3. Phiên bản này của chức năng hoạt động tốt hơn rất nhiều:
Một phiên bản thậm chí nhanh hơn chỉ đơn giản là trước khi phân bổ mảng:
Đề xuất trên là câu trả lời. Sử dụng các mảng preallrocated. Khi được hỏi ngày 22 tháng 5 năm 2015 lúc 14:36May 22, 2015 at 14:36
ChrisayCockchrisaycockchrisaycock 35.3K14 Huy hiệu vàng88 Huy hiệu bạc121 Huy hiệu đồng14 gold badges88 silver badges121 bronze badges 4
Không phải là Numpy nhưng Scipy cung cấp chính xác chức năng thay đổi mà bạn muốn,
trong đó mặc định là mang lại một giá trị không đổi từ bên ngoài mảng có giá trị 4, được đặt ở đây thành 5. Điều này cung cấp cho đầu ra mong muốn,
và sự thay đổi tiêu cực hoạt động tương tự,
Cung cấp đầu ra
Đã trả lời ngày 29 tháng 5 năm 2015 lúc 16:22May 29, 2015 at 16:22
Ed Smithed SmithEd Smith 12.1k2 Huy hiệu vàng42 Huy hiệu bạc53 Huy hiệu đồng2 gold badges42 silver badges53 bronze badges 4 Đối với những người muốn chỉ sao chép và dán sự triển khai nhanh nhất của Shift, có một điểm chuẩn và kết luận (xem phần cuối). Ngoài ra, tôi giới thiệu tham số fill_value và sửa một số lỗi. Điểm chuẩn
Kết quả điểm chuẩn:
Sự kết luậnShift5 là người chiến thắng! Đó là giải pháp thứ ba của OP. Đã trả lời ngày 7 tháng 3 năm 2017 lúc 7:12Mar 7, 2017 at 7:12
GZCGZCgzc 7.6408 Huy hiệu vàng38 Huy hiệu bạc60 Huy hiệu đồng8 gold badges38 silver badges60 bronze badges 7 Điểm chuẩn và giới thiệu Numba1. Tóm tắt
2. Điểm chuẩn chi tiết với các tùy chọn tốt nhất
3. Mã3.1 def shift(xs, n): e = np.empty_like(xs) if n >= 0: e[:n] = np.nan e[n:] = xs[:-n] else: e[n:] = np.nan e[:n] = xs[-n:] return e 7
03.2. def shift(xs, n): e = np.empty_like(xs) if n >= 0: e[:n] = np.nan e[n:] = xs[:-n] else: e[n:] = np.nan e[:n] = xs[-n:] return e 9
13.2. def shift(xs, n): e = np.empty_like(xs) if n >= 0: e[:n] = np.nan e[n:] = xs[:-n] else: e[n:] = np.nan e[:n] = xs[-n:] return e 9
3.3. import numpy as np from scipy.ndimage.interpolation import shift xs = np.array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) shift(xs, 3, cval=np.NaN) 0Phương pháp tốt nhất với kích thước mảng ~ 20.000
3: 4 và 5 của Chrisaycockimport numpy as np from scipy.ndimage.interpolation import shift xs = np.array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) shift(xs, 3, cval=np.NaN) 0: Sử dụng hai lần array([ nan, nan, nan, 0., 1., 2., 3., 4., 5., 6.]) 7 bởi ChrisayCockarray([ nan, nan, nan, 0., 1., 2., 3., 4., 5., 6.]) 8: @numba.njit Phiên bản trang trí trước đó.
4.2.1 Thời gian tương đối, tất cả các phương pháp
4.2.2 Thời gian thô, tất cả các phương pháp
Đã trả lời ngày 10 tháng 7 năm 2020 lúc 20:07Jul 10, 2020 at 20:07
np8np8np8 23.3K10 Huy hiệu vàng80 Huy hiệu bạc90 Huy hiệu Đồng10 gold badges80 silver badges90 bronze badges Không có chức năng nào làm những gì bạn muốn. Định nghĩa của bạn về sự thay đổi hơi khác so với những gì hầu hết mọi người đang làm. Các cách để thay đổi một mảng thường được lặp lại: 2Tuy nhiên, bạn có thể làm những gì bạn muốn với hai chức năng. Xem xét 1:Consider 1: 3Sau khi chạy CPROFILE trên chức năng đã cho của bạn và mã trên bạn cung cấp, tôi thấy rằng mã bạn đã cung cấp thực hiện 42 cuộc gọi chức năng trong khi 7 thực hiện 14 cuộc gọi khi ARR dương và 16 khi nó âm. Tôi sẽ thử nghiệm thời gian để xem cách mỗi lần thực hiện với dữ liệu thực.Đã trả lời ngày 22 tháng 5 năm 2015 lúc 16:29May 22, 2015 at 16:29
2 Bạn có thể chuyển đổi 3 thành 4 hoặc 5 với 6 trước, sau đó bạn có thể sử dụng phương thức 7 như bạn muốn.Example: 4Đã trả lời ngày 4 tháng 1 năm 2018 lúc 13:52Jan 4, 2018 at 13:52
Max Xumax XuMax Xu 1.98314 Huy hiệu bạc12 Huy hiệu đồng14 silver badges12 bronze badges 0 Bạn cũng có thể làm điều này với gấu trúc: Sử dụng một mảng dài 2356: 5Sử dụng Scipy: 6Sử dụng gấu trúc: 7Trong ví dụ này, sử dụng gấu trúc nhanh hơn khoảng 8 lần so với scipy Đã trả lời ngày 25 tháng 6 năm 2019 lúc 14:20Jun 25, 2019 at 14:20
Ran Aroussiran AroussiRan Aroussi 5311 huy hiệu vàng6 Huy hiệu bạc1 gold badge6 silver badges11 bronze badges 1 Nếu bạn muốn một lớp phủ từ Numpy và không quá quan tâm đến hiệu suất, hãy thử: 8Giải thích: 8 Tạo một ma trận với mảng của bạn một lần chéo, 9 tổng hợp cột ma trận khôn ngoan và 0 lấy các phần tử tương ứng với kích thước của mảng ban đầu. Chơi xung quanh với 1 và 2 vì các tham số có thể cung cấp cho bạn sự thay đổi theo các hướng khác nhau.Đã trả lời ngày 20 tháng 10 năm 2019 lúc 9:49Oct 20, 2019 at 9:49
Một cách đơn giản và hiệu quả hỗ trợ các giá trị thay đổi tê liệt và tiêu cực như thư viện gấu trúc. Nó ngăn chặn việc tạo ra mảng gốc trong các đối số và cũng hoạt động với một mảng số nguyên:numba and negative shift values like Pandas library. It prevents corrupting the original array in arguments, and also works with an integer array: 9Example:: 0Timeit:: 1Lưu ý: Nếu bạn không cần tê, chỉ với Numpy, sau đó xóa dòng 3 and the numba import.Đã trả lời ngày 5 tháng 3 lúc 15:47Mar 5 at 15:47
Nand0sanNand0sanNand0san 4153 Huy hiệu bạc11 Huy hiệu đồng3 silver badges11 bronze badges 0 Có lẽ 5 là những gì bạn cần 2Đã trả lời ngày 21 tháng 4 năm 2021 lúc 5:54Apr 21, 2021 at 5:54
Fitz_HooFitz_HooFitz_Hoo 5415 Huy hiệu bạc4 Huy hiệu đồng5 silver badges4 bronze badges 1 Giải pháp của tôi liên quan đến 5 và các mảng đeo mặt nạ: 3Về cơ bản, tôi chỉ sử dụng 5 để thay đổi mảng, sau đó sử dụng 7 để đánh dấu các phần tử không mong muốn là không hợp lệ và điền vào các vị trí không hợp lệ đó bằng 8. Tôi đặt 9 thành 0 để điền vào 8 sẽ không gây ra bất kỳ vấn đề nào. 4Đã trả lời ngày 7 tháng 11 năm 2021 lúc 22:42Nov 7, 2021 at 22:42
HÀM NGHIHÀM NGHIHàm Nghi 671 Huy hiệu bạc5 Huy hiệu đồng1 silver badge5 bronze badges Dưới đây là một khái quát của câu trả lời nhanh ( 0) để hỗ trợ các mảng đa chiều tùy ý: 5Đã trả lời ngày 9 tháng 12 năm 2021 lúc 23:17Dec 9, 2021 at 23:17
HugueshuguesHugues 2.55121 huy hiệu bạc33 huy hiệu đồng21 silver badges33 bronze badges Đây là một giải pháp cho hai chiều không sử dụng các chức năng tích hợp đặc biệt từ Numpy và do đó tương thích với Numba. 6
Đã trả lời ngày 28 tháng 3 lúc 15:02Mar 28 at 15:02
Tôi nghĩ rằng tôi có một giải pháp nhanh hơn: Tại sao không chỉ sử dụng deque? Tôi đã thêm 2 điểm chuẩn vào giải pháp điểm chuẩn từ @GZC: 7Và trên máy tính xách tay của tôi, đầu ra tốt hơn nhiều so với bất kỳ giải pháp nào khác được đề xuất: 8Đã trả lời ngày 6 tháng 2 lúc 12:51Feb 6 at 12:51
AlexalexalEx 1636 Huy hiệu bạc11 Huy hiệu đồng6 silver badges11 bronze badges 3 Một cách để làm điều đó mà không làm đổ mã vào các trường hợp với mảng: 9Với ma trận, nó có thể được thực hiện như thế này: 0Đã trả lời ngày 21 tháng 12 năm 2019 lúc 12:40Dec 21, 2019 at 12:40
Alon Gwetaalon GwetaAlon Gweta 3372 Huy hiệu bạc7 Huy hiệu đồng2 silver badges7 bronze badges 1 Làm thế nào để bạn chuyển dữ liệu trong một mảng trong Python?Làm thế nào để chuyển các yếu tố trong một danh sách trong Python.. A_List = Bộ sưu tập.Deque ([1, 2, 3, 4, 5]). một danh sách.xoay (2) dịch chuyển `a_list` 2 vị trí sang phải .. shifted_list = list (a_list). print(shifted_list). Làm thế nào để bạn thay đổi các yếu tố trong một mảng 2D trong Python?Để chuyển các phần của các phần tử mảng của mảng 2D sang trái, hãy sử dụng phương thức numpy.left_shift () trong Python Numpy.Các bit được dịch chuyển sang trái bằng cách nối thêm X2 0S ở bên phải của X1.Vì biểu diễn nội bộ của các số ở định dạng nhị phân, hoạt động này tương đương với việc nhân x1 với 2 ** x2.use the numpy. left_shift() method in Python Numpy. Bits are shifted to the left by appending x2 0s at the right of x1. Since the internal representation of numbers is in binary format, this operation is equivalent to multiplying x1 by 2**x2.
Làm thế nào để bạn chuyển đổi hàng và cột của một ma trận trong Python?Để chuyển rumpy mảng ndarray (hàng hoán đổi và cột), sử dụng thuộc tính T (.t), phương thức ndarray chuyển vị trí () và hàm numpy.transpose ().use the T attribute ( . T ), the ndarray method transpose() and the numpy. transpose() function.
Làm thế nào để bạn chuyển đổi các cột trong một ma trận trong Python?Cách tiếp cận :.. Nhập mô -đun Numpy .. Tạo một mảng numpy .. Trao đổi cột với chỉ mục .. In mảng cuối cùng .. |