这是我第一次发帖到这个论坛,我想从一开始就说我不是一个熟练的程序员.如果问题或代码不清楚,请告诉我!
我试图通过引导来获得交互的95%置信区间(CI)(这是我的测试统计).我正在使用"boot"包.我的问题是,对于每个重新采样,我希望在受试者内进行随机化,以便来自不同受试者的观察结果不会混合.这是生成类似于我的数据帧的代码.如您所见,我有两个主体内因素("Num"和"Gram",我对两者之间的相互作用感兴趣):
Subject = rep(c("S1","S2","S3","S4"),4)
Num = rep(c("singular","plural"),8)
Gram = rep(c("gram","gram","ungram","ungram"),4)
RT = c(657,775,678,895,887,235,645,916,930,768,890,1016,590,978,450,920)
data = data.frame(Subject,Num,Gram,RT)
Run Code Online (Sandbox Code Playgroud)
这是我用来获得经验交互值的代码:
summary(lm(RT ~ Num*Gram, data=data))
Run Code Online (Sandbox Code Playgroud)
如您所见,我的两个因素之间的相互作用是-348.我想得到这个统计信息的bootstrap置信区间,我可以使用"boot"包生成:
# You need the following packages
install.packages("car")
install.packages("MASS")
install.packages("boot")
library("car")
library("MASS")
library("boot")
#Function to create the statistic to be boostrapped
boot.huber <- function(data, indices) {
data <- data[indices, ] #select obs. in bootstrap sample
mod <- lm(RT ~ Num*Gram, data=data)
coefficients(mod) #return coefficient vector
}
#Generate bootstrap estimate
data.boot <- boot(data, boot.huber, 1999)
#Get confidence interval
boot.ci(data.boot, …Run Code Online (Sandbox Code Playgroud) 我有2个数据帧具有相同的列但不同的日期时间索引.我想重新对其中一个进行重新采样,以使用另一个的索引,并在另一个没有数据的索引中的任何日期转发数据.
import pandas as pd
import numpy as np
from datetime import datetime as dt
a_values = np.random.randn(4, 4)
a_index = [dt(2012, 3, 16), dt(2012, 3, 19), dt(2012, 3, 20), dt(2012, 3, 21)]
a = pd.DataFrame(data=a_values, index=a_index)
b_values = np.trunc(np.random.randn(3, 4) * 1000)
b_index = [dt(2012, 3, 16), dt(2012, 3, 19), dt(2012, 3, 21)]
b = pd.DataFrame(data=b_values, index=b_index)
c_insert = a.ix['2012-03-20']
c = b.append(c_insert).sort()
c.ix['2012-03-20'] = c.ix['2012-03-19']
Run Code Online (Sandbox Code Playgroud)
'a'表示其索引我想用作重采样参考的数据帧.'b'表示我想重新采样和转发填充数据的数据帧.'c'表示我想要的结果.
请注意,'b'缺少'a'中存在的'2012-03-20'索引.'c'用索引'2012-03-19'的'b'列中的数据填充索引'2012-03-20'的列
pandas是否具有执行此操作的功能.
提前致谢.
PIR
很容易重新采样数组
a = numpy.array([1,2,3,4,5,6,7,8,9,10])
Run Code Online (Sandbox Code Playgroud)
具有整数重采样因子.例如,使用因子2:
b = a[::2] # [1 3 5 7 9]
Run Code Online (Sandbox Code Playgroud)
但是使用非整数重采样因子,它不会那么容易:
c = a[::1.5] # [1 2 3 4 5 6 7 8 9 10] => not what is needed...
Run Code Online (Sandbox Code Playgroud)
它应该是(使用线性插值):
[1 2.5 4 5.5 7 8.5 10]
Run Code Online (Sandbox Code Playgroud)
或(通过采取阵列中最近的邻居)
[1 3 4 6 7 9 10]
Run Code Online (Sandbox Code Playgroud)
如何使用非整数重采样因子重新采样numpy数组?
应用示例:音频信号重采样/重新排样
这个算法已经在我脑海里存在了很长时间,但我无法在任何地方找到它.虽然我不能成为唯一一个想到它的人,但这很简单.以下是它的工作原理:
你从一个图像开始.说,7x7px:

你需要重新取样,比如5x5px:

所以你要做的就是采用每个新方块的平均颜色:

这不是最近邻居,因为它只采用一个像素的颜色,而不是恰好覆盖源像素的分数像素.它也不是双线性,双三次,lanczos或任何其他插值.
那么 - 它是什么?在我看来,这应该是"数学上完美的"重采样算法,虽然因为我没有"数学上完美"的定义,我无法证明或证明这一点.
最后但并非最不重要的是,"数学上完美"并不总是"最好看",所以我想知道它在"质量"方面与其他主流图像重采样算法(bicubic,lanczos)相比如何?当然,这是一个主观的术语,所以如果这个算法和其他算法之间存在显着差异,我很感兴趣,这是大多数人都会同意的.
PS我已经可以告诉它一些事情 - 它不会像素艺术那样"最好看",如这里所示; 有特殊的算法(2xSAI等); 并且它也不是最好的放大图片 - 插值会赢得那里.但是对于缩小的图片...?
更新1:嗯,刚刚发现超级采样.这似乎是它的变体,具有网格类型的样本排列,其中样本的数量针对源图像和目标图像的分辨率进行了优化.
对于Nvidia GTX480 GPU,使用驱动程序版本275.50和280.19重新采样图像,灰度值几乎没有变化.也许这是一个插值问题.除了OpenCL 1.1版的实现之外,我无法确定新版本中的更改.仅使用OpenCL 1.0,灰度值的变化相同.
在下面的代码中,驱动程序版本275.50和280.19之间给出了不同的结果:
success oclInitImgData(struct _Image2d *image)
{
cl_image_format volume_format;
volume_format.image_channel_order = CL_R;
volume_format.image_channel_data_type = CL_UNORM_INT16;
size = len[0] * sizeof(unsigned short);
img_h = clCreateImage2D(Ocl._GPUContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
&volume_format, len[0], len[1], size, data, &error);
resampledImg_h = clCreateBuffer(Ocl._GPUContext, CL_MEM_READ_WRITE, size, NULL, &error);
oclResampleImg(Ocl._GPUCommandQueue[posSet], Ocl._pGPUKernels[posSet][K_IMG_RESAMPLE], img_h, resampledImg_h , Size, PixelSize, mm_per_p, vm_h);
}
__kernel void resampleImage( __read_only image2d_t IN image, __global uint OUT *resampledImage)
{
//get resampled position
int2 posResampledImg = (int2)(get_global_id(0), get_global_id(1));
//get dimension of the image
int2 …Run Code Online (Sandbox Code Playgroud) 如果另一列中的单元格符合我的条件,我想重新采样数据帧
df = pd.DataFrame({
'timestamp': [
'2013-03-01 08:01:00', '2013-03-01 08:02:00',
'2013-03-01 08:03:00', '2013-03-01 08:04:00',
'2013-03-01 08:05:00', '2013-03-01 08:06:00'
],
'Kind': [
'A', 'B', 'A', 'B', 'A', 'B'
],
'Values': [1, 1.5, 2, 3, 5, 3]
})
Run Code Online (Sandbox Code Playgroud)
对于每个时间戳,我可能有2-10种,我想要正确地重新采样而不产生NaN.目前,我使用下面的代码对整个数据框进行重新采样并得到NaNs.我认为这是因为我有一些特定时间戳的条目.
df.set_index('timestamp').resample('5Min').mean()
Run Code Online (Sandbox Code Playgroud)
一种方法是为每种类型创建不同的数据帧,重新采样每个数据帧,并加入结果数据帧.我想知道是否有任何简单的方法.
我需要在node.js. 所以我想知道是否有一个工具javascript可以像pandas在 Python 中一样工作?
假设我有与此示例类似的数据:
[{
"time": "28-09-2018 21:29:04",
"value1": 1280,
"value2": 800
},
{
"time": "28-09-2018 21:38:56",
"value1": 600,
"value2": 700
},
{
"time": "29-09-2018 10:40:00",
"value1": 1100,
"value2": 300
},
{
"time": "29-09-2018 23:50:48",
"value1": 140,
"value2": 300
}]
Run Code Online (Sandbox Code Playgroud)
在Python我将这些数据放入pandas数据帧中,然后将其重新采样到具有不同采样率的新数据帧中。在此示例中为每日数据:
import pandas
df = pandas.DataFrame(...)
df_days = df.resample('1440min').apply({'value1':'sum', 'value2':'sum'}).fillna(0)
Run Code Online (Sandbox Code Playgroud)
所以我的新数据看起来像这样:
[{
"time": "28-09-2018 00:00:00",
"value1": 1880,
"value2": 1500
},
{
"time": "29-09-2018 00:00:00",
"value1": 1240,
"value2": 600
}] …Run Code Online (Sandbox Code Playgroud) 在嵌入式(Windows CE)C++项目中,我必须将任意采样率重新采样(或向上)到44100 Hz.
是否有用于音频重采样的免费便携式C/C++库?
编辑:保罗在下面解决了这个问题.谢谢!
我正在尝试将3x3矩阵重新采样(升级)为5x5,使用interpolate.interp2d或interpolate.RectBivariateSpline(或其他任何工作)填充中间点.
如果有一个简单的现有函数来执行此操作,我想使用它,但我还没有找到它.例如,一个函数可以像:
# upscale 2x2 to 4x4
matrixSmall = ([[-1,8],[3,5]])
matrixBig = matrixSmall.resample(4,4,cubic)
Run Code Online (Sandbox Code Playgroud)
那么,如果我从一个3x3矩阵/数组开始:
0,-2,0
-2,11,-2
0,-2,0
Run Code Online (Sandbox Code Playgroud)
我想计算一个新的5x5矩阵("I"表示内插值):
0, I[1,0], -2, I[3,0], 0
I[0,1], I[1,1], I[2,1], I[3,1], I[4,1]
-2, I[1,2], 11, I[3,2], -2
I[0,3], I[1,3], I[2,3], I[3,3], I[4,3]
0, I[1,4], -2, I[3,4], 0
Run Code Online (Sandbox Code Playgroud)
我一直在搜索和阅读并尝试各种不同的测试代码,但我还没有弄清楚我正在尝试做什么的正确语法.我也不确定我是否需要在某些行中使用meshgrid,mgrid或linspace.
编辑:修复和工作感谢Paul
import numpy, scipy
from scipy import interpolate
kernelIn = numpy.array([[0,-2,0],
[-2,11,-2],
[0,-2,0]])
inKSize = len(kernelIn)
outKSize = 5
kernelOut = numpy.zeros((outKSize,outKSize),numpy.uint8)
x = numpy.array([0,1,2])
y = numpy.array([0,1,2])
z = kernelIn
xx = …Run Code Online (Sandbox Code Playgroud) 我正在尝试重新采样此 Dataframe 的Timestamp列:
Transit.head():
Timestamp Plate Gate
0 2013-11-01 21:02:17 4f5716dcd615f21f658229a8570483a8 65
1 2013-11-01 16:12:39 0abba297ac142f63c604b3989d0ce980 64
2 2013-11-01 11:06:10 faafae756ce1df66f34f80479d69411d 57
Run Code Online (Sandbox Code Playgroud)
这就是我所做的:
Transit.drop_duplicates(inplace=True)
Transit.Timestamp = pd.to_datetime(Transit.Timestamp)
Transit['Timestamp'].resample('1H').pad()
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误:
Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激。