我正在尝试使用mathematica创建矩阵图.使用ArrayPlot []我得到一个非常好的数字,除了它被白色边缘包围的事实.在下面的例子中,我已经找到了问题的根源.
http://img689.imageshack.us/img689/8427/badmargin.png
如果我尝试导出生成的图形,它也会导出边距.我希望我的数组内容填充一定大小的矩形,以便它可以叠加在另一个图像上,但ArrayPlot函数会产生干扰的边距.
做什么?
QuickEdit:ImageCrop在我的情况下不起作用,因为a)我希望我的结果图像具有一定的大小,并且b)没有指定我想要移除自动版本的宽边距可能会弄乱我的图形(第一行可能很好例如,是白色的.
我有点不知道如何在Mathematica中有效地执行以下操作:
a = { 1, 2, 3, 4, 5 }; (* list of integers *)
b = { 2, 4, 6, 8 }; (* another list of integers *)
filter = Table[MemberQ[b, element], {element,a}]
Run Code Online (Sandbox Code Playgroud)
预期产出是:
{False, True, False, True, False}
Run Code Online (Sandbox Code Playgroud)
我的名单a,并b都大了,所以数学是线性搜索,通过做kazillion b.我希望它使用哈希表进行更快的查找.但似乎没有这样的结构.我能找到的最接近的是SparseArray,但是
sa = SparseArray[{1 -> True, 2 -> True}];
MemberQ[sa, 1]
Run Code Online (Sandbox Code Playgroud)
是False.
我确信在一行代码或更少的代码中,这在Mathematica中一定是可能的,我只是看不到树木或其他东西.
救援的任何英雄?同时,我打算用C#做这件事.
我有一种情况,在某种程度上,div的html内容被更改为其他东西,然后被更改回来.一些jquery ui控件是行为不端的.我已将问题简化为以下代码段,它基本上显示与该按钮关联的事件处理程序不再触发.我假设当它们消失时,这些都是垃圾收集的.所以我的问题是 -
如何防止事件处理程序从DOM中丢失时被垃圾回收?
我知道我可以重新分配click()函数,但由于我使用的是外部库(jquery ui),我真的不知道它对我的控件做了什么.我只是希望他们的事件恢复原样.
<div id="container">
<p>This container has a button, which will forget its click()...</p>
<input id="testbutton" type="button" value="Click Me!"/>
</div>
<script type="text/javascript">
$(function(){
$("#testbutton").click(
function(){
alert("Button has been clicked!");
})
});
</script>
<div>
<p>... when this button reseats html</p>
<input id="actionbutton" type="button" value="Toggle"/>
</div>
<script type="text/javascript">
var toggle = false;
var html;
$(function(){
$("#actionbutton").click(
function(){
toggle = !toggle;
if(toggle){
html = $("#container").html();
$("#container").html("");
} else $("#container").html(html);
})
});
</script>
Run Code Online (Sandbox Code Playgroud)
这个小伙子展示了我所遇到的问题.
给定嵌套视图结构,例如:
如何禁用灰色边缘上的输入,这样即使用户手指握住它,但触摸黄色视图,触摸事件也会无dispatchTouchEvent()阻碍地注册该视图?
编辑:为了进一步解释,我需要灰色区域的某种手掌剔除系统.在黄色区域中,用户可以用他的手指绘制.所有这些都可以正常工作,但在某些带无边框显示屏的手机上,您可能会意外触摸灰色区域,灰色区域会记录为输入并且图形会被破坏.
仅当用户同时在多个位置触摸屏幕时才会发生这种情况.在这一点上,人们可能会责怪用户购买噱头,但我自己也尝试过,并且很容易意外碰到边缘,并防止事件正常流动.
在我发布这个问题之后,我想出了一个使用多点触控事件的有点hacky解决方案.它比以前工作得更好,但因为它不是真正的多点触摸事件,有时它会过时并停止完全注册输入.此外,最终能够在黄色框中捕获真实的多点触摸事件(例如,进行放大 - 绘制手势)将会很棒.
到目前为止,我的解决方案的基本前提是:
onDraw().MotionEvent的dispatchTouchEvent()然后:
// ... event:MotionEvent, pointerCoordsOut:MotionEvent.PointerCoords
for (pidx in 0 until event.pointerCount) {
event.getPointerCoords(pidx, pointerCoordsOut)
if (inYellowArea(pointerCoordsOut.x, pointerCoordsOut.y)) {
//pointerCoordsOut now has (x,y) that I need
}
}
Run Code Online (Sandbox Code Playgroud)
最后,调整代码以接受ACTION_*和ACTION_POINTER_*事件,并让他们做一些合理的事情.这在演示案例中很容易,但我认为这是解决方案最终会失败的地方.
因此,我仍然希望有一个适当的解决方案,以便在边界上进行手掌拒绝 - 如果该事件根本不存在,而不是在我的情况下,我试图破译的复杂手势的一部分.
编辑:
仍然愿意接受建议.
我有一个100 GB的文本文件,这是一个来自数据库的BCP转储.当我尝试导入它时BULK INSERT,我在行号219506324上得到了一个神秘的错误.在解决这个问题之前我想看看这行,但是我最喜欢的方法是
import linecache
print linecache.getline(filename, linenumber)
Run Code Online (Sandbox Code Playgroud)
扔了一个MemoryError.有趣的是手册上说的是"此功能将永远不会抛出异常." 在这个大文件中,当我尝试读取第1行时,它会抛出一个,我有大约6GB的可用RAM ...
我想知道到达那条无法到达的线路最优雅的方法是什么.可用的工具是Python 2,Python 3和C#4(Visual Studio 2010).是的,我明白我总能做点什么
var line = 0;
using (var stream = new StreamReader(File.OpenRead(@"s:\source\transactions.dat")))
{
while (++line < 219506324) stream.ReadLine(); //waste some cycles
Console.WriteLine(stream.ReadLine());
}
Run Code Online (Sandbox Code Playgroud)
哪个会奏效,但我怀疑这是最优雅的方式.
编辑:我正在等待关闭此线程,因为包含该文件的硬盘驱动器现在正由另一个进程使用.我将测试建议的方法和报告时间.谢谢大家的建议和意见.
结果是我实施了Gabes和Alexes方法,看看哪一个更快.如果我做错了什么,请告诉我.我正在使用Gabe建议的方法在我的100GB文件中使用第10百万行,然后使用Alex建议的方法,我将其松散地翻译成C#...我自己添加的唯一内容是,首先阅读300 MB文件到内存只是为了清除硬盘缓存.
const string file = @"x:\....dat"; // 100 GB file
const string otherFile = @"x:\....dat"; // 300 MB file
const int linenumber = 10000000;
ClearHDDCache(otherFile);
GabeMethod(file, linenumber); …Run Code Online (Sandbox Code Playgroud) 我想知道如果一个静态类在ASP.NET MVC应用程序可以初始化一次以上.我最初设计我的应用程序,以便静态组件从数据库中获取一些东西并充当缓存,我向从构造函数调用的类添加了一个刷新方法.刷新方法也通过应用程序的管理部分提供.在某些时候,我注意到数据已更新,无需手动触发,这意味着静态构造函数不止一次运行.
有几种情况我可以合理地看到这种情况发生,例如未处理Exception导致重新初始化.但我很难复制这个,所以我想肯定.
我最近完成了一个相当大的(一个人)WPF项目,并开始编写一些有趣的东西.我几乎完成了一个值得向朋友和同事展示的应用程序,我开始玩窗口大小 - 手动调整窗口大小 - 只是为了看看各种屏幕上会发生什么.
发生了什么 - 我的窗口因某些窗口大小而损坏,特别是在大约100x100范围内.我很困惑,并开始从XAML,我的代码,一切中删除部件.但问题仍然存在.
最后,我创建了一个全新的WPF项目 - 我甚至没有更改名称 - 它被称为WpfApplication1.当然,会出现相同的文物.它们比应用程序更精细,但仍然清晰可见.

发生什么了?
我意识到最明显的答案是检查我的显卡驱动程序,我会尝试降级到早期版本; 但同时请注意,我对一个人的项目相当大 -项目完美无缺,它甚至使用DirectX着色器!而且我在前一周安装了最新的驱动程序,当时我还重新安装了Windows.
我正在运行带有所有补丁的Windows Server 2008 R2,带有SP1的 vanilla Visual Studio - 没有实验编译器或任何东西.
编辑
问题只发生在我的机器上,如果我在我的机器上编译并在另一台机器上运行,问题就不明显了.
Bran新项目的XAML很简单:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
编辑2
似乎最新的Catalyst驱动程序存在某种问题- 11.8.安装11.7修复了问题作为一种解决方法,因为,预期.神秘有点解决了,除了为什么 ......
那么有谁知道为什么最新的催化剂会对WPF造成严重破坏?
我正在为我的工作重构一些旧代码.一些白痴(我,2年前)写了一些我觉得很臭的东西.我有这种感觉(我可能会在某处阅读并忘记源代码)C#中的构造函数应该快速返回,因为有一些技术细节,可能与垃圾收集有关.即以下
class A
{
public object Result {get; private set;}
private object RunLongOperation(){/* ... */}
public A(){
Result = RunLongOperation();
}
}
Run Code Online (Sandbox Code Playgroud)
是不好的做法.所以我的问题是双重的 - 它真的很糟糕,如果是这样,为什么呢?以上可以改写为
class A
{
public object Result {get; private set;}
private static object RunLongOperation(){/* ... */}
private A() { }
public static A Make(){
return new A { Result = RunLongOperation() };
}
}
Run Code Online (Sandbox Code Playgroud)
通过一种工厂静态方法.这对我来说似乎代码不是必要的,但实际的对象很快就构建了.
为了照亮光线,构造函数会获取一些参数并渲染图像RunLonOperation(),并根据输入参数执行其他一些操作.然后该类缩减为不可变结果容器.根据参数,操作大约需要10到20秒.
我经常会有一些我想要执行的代码,例如种子数据库,删除数据库,从数据库下载一些数据并以一些有趣的方式整理它.所有这些任务都可以表示为C#中的独立函数.
Ala控制台应用程序:
class Program{
static void Task1(){}
static void Task2(){}
static void Main(){
//Task1();
//Task2();
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我注释掉了我不想调用的函数,并运行我想要调用的函数.编译并等待结果.
我正在寻找一种简化这一过程的方法.例如,在单元测试中,您可以右键单击一个函数,并通过一些魔术直接从Visual Studio执行该函数.
也许有一个扩展可以做到这一点,但我一直无法找到它.到目前为止,我知道清理这个的最好方法是在LinqPad中制作片段.但我觉得我应该能够直接从Visual Studio中完成这项工作.