在最近的一个问题中,我询问了将大型 numpy 数组转换为分隔字符串的最快方法。我提出这个问题的原因是因为我想获取该纯文本字符串并将其传输(例如通过 HTTP)到用其他编程语言编写的客户端。显然,任何客户端程序都可以轻松使用分隔的数字字符串。但是,有人建议,由于字符串转换速度很慢,因此在 Python 端对数组进行 Base64 编码并将其作为二进制发送会更快。这确实更快。
我现在的问题是,(1)如何确保编码的 numpy 数组能够很好地传输到不同操作系统和不同硬件上的客户端,以及(2)如何在客户端解码二进制数据。
对于(1),我倾向于做如下的事情
import numpy as np
import base64
x = np.arange(100, dtype=np.float64)
base64.b64encode(x.tostring())
Run Code Online (Sandbox Code Playgroud)
我还有什么需要做的吗?
对于 (2),我很乐意在任何编程语言中提供一个示例,其目标是获取浮点数的 numpy 数组并将它们转换为类似的本机数据结构。假设我们已经完成了 Base64 解码并拥有一个字节数组,并且我们还知道 numpy dtype、维度以及所需的任何其他元数据。
谢谢。
我有一个字符串数组,我想使用连接函数.但是,我想为每个字符串添加相同的字符串.我可以在一行中执行此操作,而不是首先迭代数组并在使用join之前更改每个值吗?
实际上这有点棘手.前缀不是连接分隔符的一部分.这意味着如果在(1,2,3,4,5)数组上使用了类似"num-"的前缀,则需要得到以下结果:num-1,num-2,num-3,num-4 ,NUM-5
我有
.green {
background-image:('http://i42.tinypic.com/xzup2.jpg')
background-repeat: no-repeat;
height:430px;
width:100%;
}
.yellow {
background-image: url('/images/yellowlight.png');
background-repeat: no-repeat;
height:430px;
width:100%;
}
Run Code Online (Sandbox Code Playgroud)
在我的CSS.
.yellow工作正常,但是.green.不起作用.怎么了?
我目前正在使用这种方法:
class Foo {
private static $num_instances = 0;
function __construct() {
self::$num_instances++;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作,但我想知道是否有一个内置的方式....
下面是我最里面的循环,运行几千次,输入大小为20 - 1000或更多.这段代码占用了99-99.5%的执行时间.我能做些什么来帮助挤出更多的表现吗?
我不打算将此代码移动到类似于使用树代码(Barnes-Hut)的东西,而是为了优化内部发生的实际计算,因为在Barnes-Hut算法中进行相同的计算.
任何帮助表示赞赏!
编辑:我在Core 2 Duo T5850(2.16 GHz)上使用Visual Studio 2008版本运行Windows 7 64位
typedef double real;
struct Particle
{
Vector pos, vel, acc, jerk;
Vector oldPos, oldVel, oldAcc, oldJerk;
real mass;
};
class Vector
{
private:
real vec[3];
public:
// Operators defined here
};
real Gravity::interact(Particle *p, size_t numParticles)
{
PROFILE_FUNC();
real tau_q = 1e300;
for (size_t i = 0; i < numParticles; i++)
{
p[i].jerk = 0;
p[i].acc = 0;
}
for (size_t i = 0; i < …Run Code Online (Sandbox Code Playgroud) val cross = (for (x<-setA; y<-setB) yield (x,y))
val cross2 = (setA flatMap (x => setB map ((x,_)))
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式来与跨产品运营商,或一些这样的?例如:
val cross3 = setA cross setB
Run Code Online (Sandbox Code Playgroud) 在本文中:无锁数据结构(pdf)显示以下"比较和交换"基础:
template <class T>
bool CAS(T* addr, T exp, T val)
{
if (*addr == exp)
{
*addr = val;
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
然后说
整个过程都是原子的
但那是怎么回事?是否有可能其他一些演员可以改变作业和作业addr之间的价值if?在这种情况下,假设所有代码都使用了这个CAS基础,那么下次有什么东西"预期"它是某种特定方式,而事实并非如此.但是,这并没有改变它可能发生的事实,在这种情况下,它仍然是原子的吗?如果另一个演员的变化被这个演员覆盖了,那么另一个演员回归真实呢?如果那不可能发生,为什么呢?
我想相信作者,所以我在这里错过了什么?我认为这一定是显而易见的.如果这看起来微不足道,我提前道歉.
通过TightVNC连接到Mac Mini上处理iPhone应用程序; Interface Builder中的控制+拖动操作将视图元素连接到文件所有者不起作用 - 我没有看到连接线.
当我将键盘,鼠标和显示器连接到Mini并直接进行处理时,它确实有效,但是通过VNC连接运行它会更加方便.必须是阻止这种情况的TightVNC连接的一些怪癖.我为光标尝试了不同的TightVNC设置(让服务器处理它等等)但没有运气.
有没有替代控制+拖动挂钩出口?
Win32 API PulseEvent()函数(kernel32.dll)的文档声明此函数"......不可靠,不应被新应用程序使用.相反,使用条件变量".但是,条件变量不能像(命名)事件那样跨进程边界使用.
我有一个跨进程,跨运行时(本机和托管代码)的场景,其中单个生产者偶尔会有一些有趣的东西让零或更多的消费者知道.现在,生产者使用此PulseEvent函数使用一个众所周知的命名事件(并设置为信号状态),当它需要知道某些事情时.零个或多个消费者等待该事件(WaitForSingleObject())并在响应中执行操作.在我的场景中不需要双向通信,并且生产者不需要知道事件是否有任何监听器,也不需要知道如果该事件是在成功地采取行动.另一方面,我不希望任何消费者曾经错过任何事件.换句话说,系统需要是完全可靠的-但是生产者并不需要知道,如果是这样的话该场景可以被认为是"时钟自动收报机" - 即,生产者为零个或多个消费者提供半常规信号以供计数.并且所有消费者必须在任何给定的时间段内具有正确的计数.允许消费者进行轮询(表现原因).自动收报机只有几毫秒(20左右,但并非完全正常).
Raymen Chen(The Old New Thing)有一篇博客文章指出了PulseEvent()函数的"根本缺陷"性质,但是我没有看到陈的陈述或发布的评论的替代方案.
任何人都可以建议吗?
请记住,IPC信号必须跨越机器上的处理边界,而不仅仅是线程.解决方案需要具有高性能,因为消费者必须能够在每个事件的10ms内采取行动.
我有一个像这样的数组:
a = array([[1,2,3],[3,4,5],[4,5,6]])
Run Code Online (Sandbox Code Playgroud)
切出1x2阵列的最有效方法是什么,只有前两列"a"?
也就是说,
array([[2,3],[4,5],[5,6]]) in this case.
Run Code Online (Sandbox Code Playgroud)
谢谢.