我试图通过使用Image和BitmapSource从WPF中显示原始数据创建的位图:
Int32[] data = new Int32[RenderHeight * RenderWidth];
for (Int32 i = 0; i < RenderHeight; i++)
{
for (Int32 j = 0; j < RenderWidth; j++)
{
Int32 index = j + (i * RenderHeight);
if (i + j % 2 == 0)
data[index] = 0xFF0000;
else
data[index] = 0x00FF00;
}
}
BitmapSource source = BitmapSource.Create(RenderWidth, RenderHeight, 96.0, 96.0, PixelFormats.Bgr32, null, data, 0);
RenderImage.Source = source;
Run Code Online (Sandbox Code Playgroud)
但是,对BitmapSource.Create的调用会抛出ArgumentException,并说"值不在预期范围内".这不是这样做的方法吗?我没有正确地打电话吗?
我对keras中的一个步幅(比如说,2,2)的想法感到有些困惑.
元组(2,2)中的第二个2是做什么的?
我知道步幅是否为(2),因为那时我们将在图像上移动滤镜2个像素.
如果我们沿着y沿着x向前跨步2,那么我们将沿着对角线运行图像.这没有多大意义.
Keras文档不清楚.
谢谢.
PyTorch 似乎没有tensor.stride(). 有人可以确认我的理解吗?
我的问题有三个。
Stride 用于访问存储中的元素。因此步幅大小将与张量的维度相同。正确的?
对于每个维度,stride 的相应元素表示沿着一维存储移动需要多少距离。正确的?
例如:
In [15]: x = torch.arange(1,25)
In [16]: x
Out[16]:
tensor([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
, 19, 20, 21, 22, 23, 24])
In [17]: a = x.view(4,3,2)
In [18]: a
Out[18]:
tensor([[[ 1, 2],
[ 3, 4],
[ 5, 6]],
[[ 7, 8],
[ 9, 10],
[11, 12]],
[[13, 14],
[15, 16],
[17, 18]],
[[19, 20], …Run Code Online (Sandbox Code Playgroud) 如何强制ol3渲染几何体中的每个点?
我遇到了openlayers 3的问题,虽然我在100米的距离上绘制了一个3000点的线串,但只有大约1000个渲染.
编辑:现在 - Openlayers 3 v.3.7.0
在开放层3中的一组点上进行足够远的放大显示,在网格图案中仅绘制了几个点.我想放大查看在厘米或毫米级地图中略微偏移的100个点.
openlayers 3有可能吗?
我一直在寻找将Bitmap转换为8bpp的最快方法.我发现了两种方法:
1.
public static System.Drawing.Image ConvertTo8bpp(Bitmap oldbmp)
{
using (var ms = new MemoryStream())
{
oldbmp.Save(ms, ImageFormat.Gif);
ms.Position = 0;
return System.Drawing.Image.FromStream(ms);
}
}
Run Code Online (Sandbox Code Playgroud)
2. http://www.wischik.com/lu/programmer/1bpp.html
但是: 1.结果质量非常低(托盘坏)
和2给我一个负步幅的位图,当我尝试锁定位并将数据复制到字节数组时,我得到一个异常:尝试读取或写入受保护的内存.这通常表明其他内存已损坏.
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
this.stride = bmpData.Stride;
this.bytesPerPixel = GetBytesPerPixel(bmp.PixelFormat);
int length = bmpData.Stride * bmp.Height;
if (this.stride < 0)
this.data = new byte[-length];
else
this.data = new byte[length];
Marshal.Copy(bmpData.Scan0, data, 0, length);
//Unlock the bitmap
bmp.UnlockBits(bmpData);
Run Code Online (Sandbox Code Playgroud)
我怎样才能让2给出积极的进步?或者我如何使用负步幅的锁定位来复制数据?
在numpy(1.8)中,我想将这个计算从Python循环中转移到更多numpy-ish以获得更好的性能:
(width, height) = base.shape
(toolw, toolh) = tool.shape
for i in range(0, width-toolw):
for j in range(0, height-toolh):
zdiff[i,j] = (tool - base[i:i+toolw, j:j+toolh]).min()
Run Code Online (Sandbox Code Playgroud)
base是一个~2000x2000阵列,tool是一个25x25阵列.(背景背景:基础和工具是高度图,我试图找出最接近基础的工具移动方法.)
我试图使用一个跨越式的技巧,从这开始:
base_view = np.lib.stride_tricks.as_strided(base, shape=(2000, 2000, 25, 25),
strides=(base.strides * 2))
Run Code Online (Sandbox Code Playgroud)
这将base_view[10,20]是从(10,20)的左上角的基数开始的25x25值的数组.
然而,这与"阵列太大"失败了.从价值测试来看,当数组的潜在大小(例如2000*2000*25*25*8)超过2 ^ 32-ish并且触发溢出检查时,它会报告此问题,从而将所有维度相乘.(我使用的是32位Python安装).
我觉得我错过了一些东西 - 为什么当步幅值明显起作用时,它不会让我创造这种"跨步观点"?有没有办法强迫这个?
更一般地说,有没有办法优化我的循环?
更新:确切错误:
ValueError Traceback (most recent call last)
<ipython-input-14-313b3d6c74fa> in <module>()
----> 1 newa = np.lib.stride_tricks.as_strided(base, shape=(1000, 1000, 25, 25), strides=(base.strides * 2))
C:\Python27\lib\site-packages\numpy\lib\stride_tricks.pyc in as_strided(x, shape, strides)
28 if strides …Run Code Online (Sandbox Code Playgroud) 在处理滚动窗口时,我以列表理解的方式编写了函数
[np.std(x[i:i+framesize]) for i in range(0, len(x)-framesize, hopsize)])]
Run Code Online (Sandbox Code Playgroud)
最近,我发现numpy.lib.stride_tricks.as_strided并发现它被广泛用于滚动窗口(例如,这篇文章),即使它是“隐藏”功能。
在有关为何未记录stride_tricks.as_strided的问题中,提到了
故意地!这很危险!帮助实现broadcast_arrays()只是底层管道。
stride_tricks.as_strided列表理解或for循环有什么优势吗?我看了的源代码,stride_tricks但收获甚微。
我有阵列:
arr = np.array([1,2,3,2,3,4,3,2,1,2,3,1,2,3,2,2,3,4,2,1])
print (arr)
[1 2 3 2 3 4 3 2 1 2 3 1 2 3 2 2 3 4 2 1]
Run Code Online (Sandbox Code Playgroud)
我想找到这个模式并返回booelan mask:
pat = [1,2,3]
N = len(pat)
Run Code Online (Sandbox Code Playgroud)
我用strides:
#https://stackoverflow.com/q/7100242/2901002
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
c = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
return c
print (rolling_window(arr, N))
[[1 2 3]
[2 3 2]
[3 2 3]
[2 3 4]
[3 4 …Run Code Online (Sandbox Code Playgroud) 对不起,这成了关于阵列的3个问题
我认为(动态)数组在D中真正强大,但以下一直困扰我一段时间:
在C++中,我可以轻松地分配具有指定值的数组,但在DI中没有找到一种方法.当然以下是没有问题的:
int[] a = new int[N];
a[] = a0;
Run Code Online (Sandbox Code Playgroud)
但它看起来效率低下,因为第一行将初始化0,并且像2一样a0.可以在D中完成类似以下的操作吗?
int[] a = new int(a0)[N]; // illegal
Run Code Online (Sandbox Code Playgroud)
在std.range中使用stride时我遇到的另一个效率问题:
import std.stdio;
import std.range;
struct S
{
int x;
this(this)
{
writeln("copy ", x);
}
}
void f(S[] s)
{
}
int main()
{
S[] s = new S[10];
foreach (i, ref v; s)
{
v.x = i;
}
f(stride(s, 3)); // error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然我天真地想,我可以简单地使用步幅创建一个新的数组而不复制它的元素?在D中没有办法这样做,对吧?
所以我去模拟,好像数组一样大步返回,并实现f为:
f(s, 3);
void f(S[] s, uint …Run Code Online (Sandbox Code Playgroud) 所以我有一系列双打.我想每隔5小时发送一次接收过程.基本上,我需要一种在它们之间发送特定双打的方法.除了将双打存储到发送缓冲区之外,还有一个功能吗?制作我自己的派生类型会更好吗?