- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Tôi có một danh sách lớn các mảng numpy (1D) là chuỗi thời gian của các sự kiện khác nhau. Mỗi điểm có một nhãn và tôi muốn phân chia mảng numpy theo nhãn của nó. Nhãn của tôi là 0, 1 và 2. Mỗi cửa sổ có kích thước cố định M.
每个窗口的标签将是窗口中可用的最大标签。因此,如果一个窗口由 0 和 1 标记的数据点组成,则整个窗口的标签将为 1。
但问题是,窗口不是标签不可知的。由于类别不平衡,我只想在标签 1 和 2 的情况下进行重叠加窗。
到目前为止,我已经编写了这段代码:
# conditional framing
data = []
start_cursor = 0
while start_cursor < arr.size:
end_cursor = start_cursor + window_size
data.append(
{
"frame": arr[start_cursor:end_cursor],
"label": y[start_cursor:end_cursor].max(),
}
)
start_cursor = end_cursor
if np.any(y[start_cursor, end_cursor] != 0):
start_cursor = start_cursor - overlap_size
但这显然太冗长而且效率低下,尤其是因为我将在我庞大的单独数组列表中调用这个 while 循环。
1 Câu trả lời
我认为这可以满足您的要求。检查的可视化不是很好,但它可以帮助您了解窗口的工作原理。希望我理解你的问题是正确的,这就是你想要做的。只要时间序列中有 1 或 2(而不是 0),窗口就会向前移动整个窗口长度的一部分(这里是 50%)。
要检查如何执行此操作,请从示例时间序列开始:
import matplotlib.pylab as plt
nhập numpy dưới dạng np
N = 5000 # time series length
# create some sort of data set to work with
x = np.zeros(N)
# add a few 1s and 2s to the list (though really they are the same for the windowing)
y = np.random.random(N)
x[y < 0.01] = 1
x[y < 0.005] = 2
# assign a window length
M = 50 # window length
overlap = 0.5 # assume 50% overlap
M_overlap = int(M * (1-overlap))
我的方法是对您的时间序列感兴趣的窗口求和。如果和
==0
,则窗口之间没有重叠,如果是
>0
则有重叠。那么,问题就变成了我们应该如何有效地计算这些总和?我比较了两种方法。第一个是简单地遍历时间序列,第二个是使用
convolution (它要快得多)。对于第一个,我还探索了求和后评估窗口大小的不同方法。
def window_sum1():
# start of windows in list windows
windows = [0,]
while windows[-1] + M < N:
check = sum(x[windows[-1]:windows[-1]+M]) == 0
windows.append(windows[-1] + M_overlap + (M - M_overlap) * check)
if windows[-1] + M > N:
windows.pop()
phá vỡ
# plotting stuff for checking
return(windows)
Niter = 10**4
print(timeit.timeit(window_sum1, number = Niter))
# 29.201083058
所以这种方法在大约 30 秒内经历了 10,000 个长度为 5000 的时间序列。但是
windows.append(windows[-1] + M_overlap + (M - M_overlap) * check)
行可以在 if 语句中简化。
def window_sum2():
# start of windows in list windows
windows = [0,]
while windows[-1] + M < N:
check = sum(x[windows[-1]:windows[-1]+M]) == 0
if check:
windows.append(windows[-1] + M)
khác:
windows.append(windows[-1] + M_overlap)
if windows[-1] + M > N:
windows.pop()
phá vỡ
# plotting stuff for checking
return(windows)
print(timeit.timeit(window_sum2, number = Niter))
# 20.456240447000003
我们看到 if 语句的时间减少了 1/3。
def window_conv():
a = np.convolve(x,np.ones(M,dtype=int),'valid')
windows = [0,]
while windows[-1] + M < N:
if a[windows[-1]]:
windows.append(windows[-1] + M_overlap)
khác:
windows.append(windows[-1] + M)
if windows[-1] + M > N:
windows.pop()
phá vỡ
return(windows)
print(timeit.timeit(window_conv, number = Niter))
#3.3695770570000008
滑动窗口
numpy 1.20
开始,有一个名为
sliding_window_view 的函数。我仍然在运行
numpy 1.19
并且无法测试它是否比卷积更快。
关于python - numpy数组的快速条件重叠窗口(框架),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69535871/
Khi xuất ra một tập lệnh, tôi có mảng numpy masked và mảng numpy chuẩn. Làm thế nào tôi có thể dễ dàng kiểm tra xem một mảng có bị masked (có dữ liệu, thuộc tính mask) khi tôi chạy tập lệnh? Câu trả lời tốt nhất là bạn có thể sử dụng isin
Câu hỏi của tôi giả sử tôi có = np.array([ np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8]), ...7,8]), np.array([7,8]), np.array
Numpy có tích hợp sẵn chức năng lũy thừa ma trận không? (Như user2357112 đã chỉ ra, thực ra tôi đang tìm kiếm phép rút gọn mô-đun theo từng phần tử) Một cách để thực hiện phép lũy thừa mô-đun cho các số thông thường là sử dụng phép lũy thừa bình phương (https://en
Tôi đã triển khai gradient descent này trong Numpy: def gradientDescent(X, y, theta, alpha, iterations): m = len(y) for i
Tôi có một dự án chạy trên CentOS7 sử dụng Numpy. Vấn đề là việc cài đặt phần phụ thuộc này mất rất nhiều thời gian. Do đó, tôi đã thử yum cài đặt thư viện numpy trước khi pip cài đặt nó. Vì vậy, tôi chạy:
để xử lý dữ liệu tôi muốn xoay. Xin lưu ý rằng tôi chỉ sử dụng được numpy và không thể sử dụng pandas. Dữ liệu gốc như sau: dữ liệu = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
numpy.random.seed(7) Tôi đã thấy nhiều con số khác nhau cho tập hạt giống này trong nhiều hướng dẫn về phân tích dữ liệu và học máy khác nhau. Việc lựa chọn một số hạt giống cụ thể có thực sự tạo nên sự khác biệt không? Hoặc bất kỳ số nào cũng được? Mục đích của việc chọn số lượng hạt giống là để đảm bảo khả năng tái tạo của cùng một thí nghiệm.
Tôi cần đọc một phần của mảng numpy khổng lồ được lưu trữ trong tệp ánh xạ bộ nhớ, xử lý dữ liệu và lặp lại cho phần khác của mảng. Toàn bộ mảng numpy chiếm khoảng 50 GB và máy của tôi có RAM 8 GB. Ban đầu tôi sử dụng numpy.m
để xử lý dữ liệu tôi muốn xoay. Xin lưu ý rằng tôi chỉ sử dụng được numpy và không thể sử dụng pandas. Dữ liệu gốc như sau: dữ liệu = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
Có vẻ như bất cứ điều gì có thể thực hiện được với numpy.empty() đều có thể dễ dàng thực hiện được với numpy.ndarray(), ví dụ: >>> np.empty(shape=(2, 2), dtype=np.dtype('d
Tôi có nhiều dạng khác nhau trong một mảng numpy lớn và tôi muốn tính khoảng cách Euclide từ cạnh này đến cạnh kia giữa chúng bằng numpy và scipy. Lưu ý: Tôi đã tìm kiếm điều này và nó khác với các câu hỏi trước đó trong stack vì tôi muốn lấy giá trị của khối thẻ trong mảng
Tôi có một mảng numpy các đối tượng có kích thước (2x3). Chúng tôi gọi nó là M1. Trong M1 có 6 mảng numpy. Hình dạng của các mảng trong một hàng nhất định của M1 là giống nhau, nhưng chúng khác với hình dạng của các mảng trong bất kỳ hàng nào khác của M1. Nghĩa là, M1 = [ [
Làm thế nào tôi có thể viết tích vô hướng sau bằng cách sử dụng ký hiệu Einstein? nhập numpy dưới dạng np LHS = np.ones((5,20,2)) RHS = np.ones((20,2)) np.sum([ np.
Giả sử tôi có np.array của a = [0, 1, 1, 0, 0, 1] và b = [1, 1, 0, 0, 0, 1] Tôi muốn một ma trận c mới sao cho nếu a[i] = 0 và b[i] = 0
Tôi có một mảng numpy có dạng (32,5). Mỗi phần tử của lô chứa một mảng numpy batch_elem = [s,_,_,_,_] trong đó s = [img,val1,val
Hãy thử đào tạo mạng nơ-ron một lớp cho bài toán phân loại đa nhãn dựa trên văn bản. mô hình = Mô hình tuần tự().thêm(Dense(20, input_dim=400, kernel_initializer='
Đầu tiên là một ví dụ đơn giản import numpy as np a = np.ones((2,2)) b = 2*np.ones((2,2)) c = 3*np.ones((2,2)) d = 4*np.
Tôi đang cố gắng tính trung bình một mảng numpy 2D. Vì vậy, tôi đã sử dụng numpy.mean nhưng kết quả lại là mảng rỗng. nhập numpy dưới dạng np ws1 = np.array(ws1) ws1_I8 = np.ar
nhập numpy dưới dạng np x = np.array([[1,2 ,3], [9,8,7]]) y = np.array([[2,1 ,0], [1,0,2]]) x[y] Đầu ra mong đợi: ar
Tôi có hai mảng A (4000,4000) trong đó chỉ có đường chéo được điền dữ liệu và mảng B (4000,5) trong đó cả hai đều được điền dữ liệu. Có cách nào nhanh hơn để nhân (dot) các mảng này ngoài hàm numpy.dot(a,b) không? Cho đến nay, tôi đã tìm thấy
Tôi là một lập trình viên xuất sắc, rất giỏi!