Hướng dẫn python resample grid - lưới lấy lại mẫu python

Tôi đang cố gắng thực hiện một thuật toán để loại bỏ biến dạng màn trập dựa trên nội suy đường cong, mà tôi đã thấy trong một bài báo (https://ieeexplore.ieee.org/document/6311354). Thuật toán này bao gồm tính toán một tọa độ X và Y mới cho mỗi pixel trong hình ảnh nguồn. Bây giờ tôi phải lấy mẫu lại lưới pixel không đều được tạo ra vào lưới thông thường, nhưng tôi không biết làm thế nào để làm điều đó. Tôi chỉ biết làm thế nào tác phẩm ánh xạ mục tiêu đến nguồn. Nhưng tôi không thể sử dụng beacuse mà tôi không thể đơn giản là đảo ngược quá trình, tạo ra lưới pixel không đều, vì mỗi pixel được tính toán riêng lẻ.

Hỏi ngày 24 tháng 9 năm 2021 lúc 6:25Sep 24, 2021 at 6:25

Hướng dẫn python resample grid - lưới lấy lại mẫu python

3

Có lẽ, việc chuyển đổi các pixel hình ảnh nguồn mang lại một lưới dày đặc (xoắn) trong mục tiêu. Điều này sẽ cho phép bạn sử dụng sơ đồ nội suy song tuyến trong các ô lưới.

Vẽ các ngang thường xuyên trong mục tiêu và tìm các giao điểm với lưới. Bạn có thể nội suy các pixel dọc theo các cạnh. Bây giờ dọc theo các chiều ngang, bạn có các điểm cách đều nhau không đều và bạn có thể nội suy giữa chúng để có các pixel cách nhau thường xuyên.

Hướng dẫn python resample grid - lưới lấy lại mẫu python

Để tăng tốc quá trình giao lộ, bạn có thể sử dụng phương pháp quét đường quét (sắp xếp các cạnh lưới trên y).

Đã trả lời ngày 24 tháng 9 năm 2021 lúc 7:54Sep 24, 2021 at 7:54

Yves Daontyves DaoustYves Daoust

55,4K8 Huy hiệu vàng43 Huy hiệu bạc99 Huy hiệu Đồng8 gold badges43 silver badges99 bronze badges

>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00     3
2000-01-01 00:06:00    12
2000-01-01 00:09:00    21
Freq: 3T, dtype: int64
2 trong phần tìm thấy-rearest-ralue-in-numpy-marray sẽ chộp ra bất kỳ đám mây điểm nào cho hàng xóm gần nhất của họ trên một lưới thông thường, trong một trang mã.

SCIPY thường xuyên Xây dựng cũng có tuyến tính, song song ... nội suy.

Scipy Griddata sử dụng KDTREE. Mặc dù điều này sẽ hoạt động, nhưng nó hoàn toàn không sử dụng độ đều đặn của lưới - các phương thức đơn giản và nhanh hơn. .

Sự lựa chọn phương pháp của bạn tất nhiên sẽ phụ thuộc vào có bao nhiêu điểm dữ liệu phân tán và bạn có bao nhiêu điểm truy vấn (lưới thông thường) - hình ảnh của bạn lớn như thế nào?

Đã trả lời ngày 19 tháng 10 năm 2021 lúc 12:29Oct 19, 2021 at 12:29

Denisdenisdenis

20.8k9 Huy hiệu vàng63 Huy hiệu bạc84 Huy hiệu đồng9 gold badges63 silver badges84 bronze badges

Series.resample (quy tắc, trục = 0, đóng = không offset = none, group_keys = _nodefault.no_default) [nguồn]#resample(rule, axis=0, closed=None, label=None, convention='start', kind=None, loffset=None, base=None, on=None, level=None, origin='start_day', offset=None, group_keys=_NoDefault.no_default)[source]#

Nhận lại dữ liệu chuỗi thời gian.

Phương pháp thuận tiện để chuyển đổi tần số và lấy mẫu lại chuỗi thời gian. Đối tượng phải có một chỉ mục giống như DateTime (DatetimeIndex, SepetIndex hoặc TimEdeltainDex) hoặc người gọi phải chuyển nhãn của chuỗi/chỉ mục giống như DateTime cho tham số từ khóa ____ 23/________ 24.

Tham sốRULEDATEOFSET, TIMEDELTA hoặc STRruleDateOffset, Timedelta or str

Chuỗi bù hoặc đối tượng biểu thị chuyển đổi mục tiêu.

trục {0 hoặc ‘index, 1 hoặc‘ cột,}, mặc định 0{0 or ‘index’, 1 or ‘columns’}, default 0

Trục nào sẽ sử dụng để lấy mẫu lên hoặc xuống. Đối với chuỗi tham số này không được sử dụng và mặc định là 0. phải là DateTimeIndex, TimEdeltainDex hoặc StentIndex.

đã đóng {’phải,’ trái,}, không có mặc định{‘right’, ‘left’}, default None

Bên nào của khoảng thời gian thùng được đóng lại. Mặc định là ‘trái, đối với tất cả các lần bù tần số ngoại trừ‘ m, ‘a,’ q, ‘bm,‘ ba, ‘bq, và’ w, tất cả đều có mặc định là ‘phải.

Nhãn {’phải,’ bên trái}, không có gì mặc định{‘right’, ‘left’}, default None

Nhãn Bin Edge nào để dán nhãn Xô. Mặc định là ‘trái, đối với tất cả các lần bù tần số ngoại trừ‘ m, ‘a,’ q, ‘bm,‘ ba, ‘bq, và’ w, tất cả đều có mặc định là ‘phải.

quy ước {’bắt đầu,’ kết thúc{‘start’, ‘end’, ‘s’, ‘e’}, default ‘start’

Chỉ dành cho thời kỳ, kiểm soát nên sử dụng bắt đầu hay kết thúc quy tắc.

Kind {‘Timestamp,’ thời gian}, tùy chọn, mặc định không có{‘timestamp’, ‘period’}, optional, default None

Vượt qua ‘dấu thời gian để chuyển đổi chỉ số kết quả thành DatetimeIndex hoặc‘ giai đoạn để chuyển đổi nó thành một thời kỳ. Theo mặc định, biểu diễn đầu vào được giữ lại.

loffsettimedelta, mặc định không cótimedelta, default None

Điều chỉnh nhãn thời gian được ghép lại.

Đã không dùng nữa kể từ phiên bản 1.1.0: Bạn nên thêm loffset vào df.index sau khi lấy mẫu lại. Xem bên dưới.You should add the loffset to the df.index after the resample. See below.

baseint, mặc định 0int, default 0

Đối với các tần số chia đều 1 ngày, nguồn gốc của các khoảng thời gian tổng hợp. Ví dụ, đối với tần số 5 phút, cơ sở có thể nằm trong khoảng từ 0 đến 4. mặc định đến 0.

Không dùng nữa kể từ phiên bản 1.1.0: Các đối số mới mà bạn nên sử dụng là ‘Offset, hoặc‘ Origin.The new arguments that you should use are ‘offset’ or ‘origin’.

onstr, tùy chọnstr, optional

Đối với DataFrame, cột để sử dụng thay vì chỉ mục để lấy mẫu lại. Cột phải giống như DateTime.

Cấp độ hoặc INT, tùy chọnstr or int, optional

Đối với Multi Index, cấp độ (tên hoặc số) để sử dụng để lấy mẫu lại. Cấp độ phải giống như DateTime.

origintimestamp hoặc str, mặc định ‘start_dayTimestamp or str, default ‘start_day’

Dấu thời gian để điều chỉnh nhóm. Thời gian gốc phải phù hợp với múi giờ của chỉ mục. Nếu chuỗi, phải là một trong những điều sau:

  • ‘Epoch, nguồn gốc là 1970-01-01

  • ‘Bắt đầu: Nguồn gốc là giá trị đầu tiên của Thời báo

  • ‘Start_day,: Nguồn gốc là ngày đầu tiên lúc nửa đêm của Timesereries

Mới trong phiên bản 1.1.0.

  • ‘End, nguồn gốc là giá trị cuối cùng của thời gian

  • ‘End_day,: Nguồn gốc là trần nửa đêm của ngày cuối cùng

Mới trong phiên bản 1.3.0.

offsetTimEdelta hoặc str, mặc định là khôngTimedelta or str, default is None

Một thời gian bù được thêm vào nguồn gốc.

Mới trong phiên bản 1.1.0.

‘End, nguồn gốc là giá trị cuối cùng của thời gianbool, optional

‘End_day,: Nguồn gốc là trần nửa đêm của ngày cuối cùngpandas 1.5.0 Release notes for examples). In a future version of pandas, the behavior will default to the same as specifying

>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00     3
2000-01-01 00:06:00    12
2000-01-01 00:09:00    21
Freq: 3T, dtype: int64
7.

Mới trong phiên bản 1.3.0.

Returnspandas.core.Resampler

Đối tượng

>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00     3
2000-01-01 00:06:00    12
2000-01-01 00:09:00    21
Freq: 3T, dtype: int64
8.

Ghi chú

Xem Hướng dẫn sử dụng để biết thêm.

Để tìm hiểu thêm về các chuỗi bù, vui lòng xem liên kết này.

Ví dụ

Bắt đầu bằng cách tạo một loạt với 9 lần dấu thời gian một phút.

>>> index = pd.date_range('1/1/2000', periods=9, freq='T')
>>> series = pd.Series(range(9), index=index)
>>> series
2000-01-01 00:00:00    0
2000-01-01 00:01:00    1
2000-01-01 00:02:00    2
2000-01-01 00:03:00    3
2000-01-01 00:04:00    4
2000-01-01 00:05:00    5
2000-01-01 00:06:00    6
2000-01-01 00:07:00    7
2000-01-01 00:08:00    8
Freq: T, dtype: int64

Downs mẫu loạt thành các thùng 3 phút và tổng các giá trị của dấu thời gian rơi vào thùng.

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64

Downs mẫu loạt thành các thùng 3 phút như trên, nhưng dán nhãn cho mỗi thùng sử dụng cạnh phải thay vì bên trái. Xin lưu ý rằng giá trị trong xô được sử dụng làm nhãn không được bao gồm trong xô, mà nó nhãn. Ví dụ, trong chuỗi ban đầu, nhóm

>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00     3
2000-01-01 00:06:00    12
2000-01-01 00:09:00    21
Freq: 3T, dtype: int64
9 chứa giá trị 3, nhưng giá trị tổng trong thùng được lấy lại với nhãn
>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00     3
2000-01-01 00:06:00    12
2000-01-01 00:09:00    21
Freq: 3T, dtype: int64
9 không bao gồm 3 (nếu có, giá trị tổng sẽ là 6, không phải 3). Để bao gồm giá trị này, hãy đóng phía bên phải của khoảng bin như được minh họa trong ví dụ bên dưới cái này.

>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00     3
2000-01-01 00:06:00    12
2000-01-01 00:09:00    21
Freq: 3T, dtype: int64

Downs mẫu loạt thành các thùng 3 phút như trên, nhưng đóng phía bên phải của khoảng thời gian thùng.

>>> series.resample('3T', label='right', closed='right').sum()
2000-01-01 00:00:00     0
2000-01-01 00:03:00     6
2000-01-01 00:06:00    15
2000-01-01 00:09:00    15
Freq: 3T, dtype: int64

Upsample sê -ri thành thùng 30 giây.

>>> series.resample('30S').asfreq()[0:5]   # Select first 5 rows
2000-01-01 00:00:00   0.0
2000-01-01 00:00:30   NaN
2000-01-01 00:01:00   1.0
2000-01-01 00:01:30   NaN
2000-01-01 00:02:00   2.0
Freq: 30S, dtype: float64

Upsample sê -ri thành các thùng 30 giây và điền các giá trị

>>> series.resample('3T', label='right', closed='right').sum()
2000-01-01 00:00:00     0
2000-01-01 00:03:00     6
2000-01-01 00:06:00    15
2000-01-01 00:09:00    15
Freq: 3T, dtype: int64
1 bằng phương pháp
>>> series.resample('3T', label='right', closed='right').sum()
2000-01-01 00:00:00     0
2000-01-01 00:03:00     6
2000-01-01 00:06:00    15
2000-01-01 00:09:00    15
Freq: 3T, dtype: int64
2.

>>> series.resample('30S').ffill()[0:5]
2000-01-01 00:00:00    0
2000-01-01 00:00:30    0
2000-01-01 00:01:00    1
2000-01-01 00:01:30    1
2000-01-01 00:02:00    2
Freq: 30S, dtype: int64

Upsample sê -ri thành các thùng 30 giây và điền các giá trị

>>> series.resample('3T', label='right', closed='right').sum()
2000-01-01 00:00:00     0
2000-01-01 00:03:00     6
2000-01-01 00:06:00    15
2000-01-01 00:09:00    15
Freq: 3T, dtype: int64
1 bằng phương pháp
>>> series.resample('3T', label='right', closed='right').sum()
2000-01-01 00:00:00     0
2000-01-01 00:03:00     6
2000-01-01 00:06:00    15
2000-01-01 00:09:00    15
Freq: 3T, dtype: int64
4.

>>> series.resample('30S').bfill()[0:5]
2000-01-01 00:00:00    0
2000-01-01 00:00:30    1
2000-01-01 00:01:00    1
2000-01-01 00:01:30    2
2000-01-01 00:02:00    2
Freq: 30S, dtype: int64

Vượt qua một chức năng tùy chỉnh thông qua

>>> series.resample('3T', label='right', closed='right').sum()
2000-01-01 00:00:00     0
2000-01-01 00:03:00     6
2000-01-01 00:06:00    15
2000-01-01 00:09:00    15
Freq: 3T, dtype: int64
5

>>> def custom_resampler(arraylike):
...     return np.sum(arraylike) + 5
...
>>> series.resample('3T').apply(custom_resampler)
2000-01-01 00:00:00     8
2000-01-01 00:03:00    17
2000-01-01 00:06:00    26
Freq: 3T, dtype: int64

Đối với một chuỗi có thời kỳ, quy ước từ khóa có thể được sử dụng để kiểm soát việc sử dụng bắt đầu hay kết thúc quy tắc.

Đặt lại một năm từng quý bằng cách sử dụng quy ước bắt đầu. Các giá trị được gán cho quý đầu tiên của giai đoạn.

>>> s = pd.Series([1, 2], index=pd.period_range('2012-01-01',
...                                             freq='A',
...                                             periods=2))
>>> s
2012    1
2013    2
Freq: A-DEC, dtype: int64
>>> s.resample('Q', convention='start').asfreq()
2012Q1    1.0
2012Q2    NaN
2012Q3    NaN
2012Q4    NaN
2013Q1    2.0
2013Q2    NaN
2013Q3    NaN
2013Q4    NaN
Freq: Q-DEC, dtype: float64

Làm lại các quý theo tháng bằng cách sử dụng quy ước ‘kết thúc. Các giá trị được gán cho tháng cuối cùng của kỳ.

>>> q = pd.Series([1, 2, 3, 4], index=pd.period_range('2018-01-01',
...                                                   freq='Q',
...                                                   periods=4))
>>> q
2018Q1    1
2018Q2    2
2018Q3    3
2018Q4    4
Freq: Q-DEC, dtype: int64
>>> q.resample('M', convention='end').asfreq()
2018-03    1.0
2018-04    NaN
2018-05    NaN
2018-06    2.0
2018-07    NaN
2018-08    NaN
2018-09    3.0
2018-10    NaN
2018-11    NaN
2018-12    4.0
Freq: M, dtype: float64

Đối với các đối tượng DataFrame, từ khóa trên có thể được sử dụng để chỉ định cột thay vì chỉ mục để lấy mẫu lại.

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
0

Đối với DataFrame có Multi Index, mức từ khóa có thể được sử dụng để chỉ định ở mức nào việc lấy mẫu lại cần diễn ra.

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
1

Nếu bạn muốn điều chỉnh sự khởi đầu của các thùng dựa trên dấu thời gian cố định:

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
2

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
3

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
4

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
5

Nếu bạn muốn điều chỉnh phần bắt đầu của các thùng bằng thời gian bù, hai dòng sau là tương đương:

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
6

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
7

Nếu bạn muốn lấy dấu thời gian lớn nhất làm phần cuối của các thùng:

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
8

Ngược lại với Start_day, bạn có thể sử dụng End_day để lấy trần vào nửa đêm của dấu thời gian lớn nhất khi kết thúc các thùng và thả các thùng không chứa dữ liệu:

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64
9

Để thay thế việc sử dụng đối số cơ sở không dùng nữa, giờ đây bạn có thể sử dụng Offset, trong ví dụ này, nó tương đương với Base = 2:

>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00     3
2000-01-01 00:06:00    12
2000-01-01 00:09:00    21
Freq: 3T, dtype: int64
0

Để thay thế việc sử dụng đối số loffset không dùng nữa:

>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00     3
2000-01-01 00:06:00    12
2000-01-01 00:09:00    21
Freq: 3T, dtype: int64
1