在纯Python中,您可以非常轻松地逐列增长矩阵:
data = []
for i in something:
newColumn = getColumnDataAsList(i)
data.append(newColumn)
Run Code Online (Sandbox Code Playgroud)
NumPy的数组没有追加功能.该hstack函数不适用于零大小的数组,因此以下方法不起作用:
data = numpy.array([])
for i in something:
newColumn = getColumnDataAsNumpyArray(i)
data = numpy.hstack((data, newColumn)) # ValueError: arrays must have same number of dimensions
Run Code Online (Sandbox Code Playgroud)
所以,我的选择是要么在适当条件下删除initalization iside循环:
data = None
for i in something:
newColumn = getColumnDataAsNumpyArray(i)
if data is None:
data = newColumn
else:
data = numpy.hstack((data, newColumn)) # works
Run Code Online (Sandbox Code Playgroud)
...或者使用Python列表并稍后转换为数组:
data = []
for i in something:
newColumn = getColumnDataAsNumpyArray(i)
data.append(newColumn)
data = numpy.array(data) …Run Code Online (Sandbox Code Playgroud) 在许多语言(和地区)有通过创建类似于块创建本地范围的一个很好的练习本.
void foo()
{
... Do some stuff ...
if(TRUE)
{
char a;
int b;
... Do some more stuff ...
}
... Do even more stuff ...
}
Run Code Online (Sandbox Code Playgroud)
如何在python中实现这一点而不会出现意外的缩进错误,并且不使用某种if True: 技巧
我在R中有一个我多次调用的函数.我想跟踪我调用它的次数,并使用它来决定在函数内部做什么.这就是我现在所拥有的:
f = function( x ) {
count <<- count + 1
return( mean(x) )
}
count = 1
numbers = rnorm( n = 100, mean = 0, sd = 1 )
for ( x in seq(1,100) ) {
mean = f( numbers )
print( count )
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢我必须在函数范围之外声明变量count.在C或C++中,我可以创建一个静态变量.我可以用R编程语言做类似的事情吗?
在maptplotlib中,可以使用imshow函数创建相关矩阵的热图表示.根据定义,这种矩阵围绕其主对角线对称,因此不需要呈现上三角和下三角.例如:

上面的例子来自这个网站 不幸的是,我无法弄清楚如何在matplotlib中做到这一点.将矩阵的上/下部分设置为无会导致黑色三角形.我用google搜索"matplotlib缺失值",但找不到任何有用的东西
我遗漏了一些非常基本的东西.
class C:
def __init__(self):
self.N = 100
pass
def f(self, param):
print 'C.f -- param'
for k in xrange(param):
for i in xrange(self.N):
for j in xrange(self.N):
a = float(i)/(1+float(j)) + float(i/self.N) ** float(j/self.N)
import cProfile
c = C()
cProfile.run('c.f(3)')
Run Code Online (Sandbox Code Playgroud)
当我在IPython中运行上面的代码时,我得到:
NameError: name 'c' is not defined
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
更新我的会话的确切粘贴在这里:http://pastebin.com/f3e1b9946
更新我没有提到问题出现在IPython中,(事实证明)是问题的根源
我创建了一个类,其对象使用一堆XML代码进行初始化.该类能够从该XML中提取各种参数,并将它们缓存在对象状态变量中.这些参数的潜在数量很大,很可能用户不需要大部分参数.这就是我决定执行"懒惰"初始化的原因.
在下面的测试用例中,这样的参数是title.当用户第一次尝试访问它时,getter函数会解析XML,正确初始化状态变量并返回其值:
class MyClass(object):
def __init__(self, xml=None):
self.xml = xml
self.title = None
def get_title(self):
if self.__title is None:
self.__title = self.__title_from_xml()
return self.__title
def set_title(self, value):
self.__title = value
title = property(get_title, set_title, None, "Citation title")
def __title_from_xml(self):
#parse the XML and return the title
return title
Run Code Online (Sandbox Code Playgroud)
这看起来不错,对我来说很好.但是,由于getter函数实际上是一个"setter",因为它对对象有非常显着的副作用,我对此感到不安.这是一个合理的担忧吗?如果是这样,我该如何解决?
在ggplot2中,geom_XXX中定义的透明度反映在图例中.例如:
df <- data.frame(x=runif(10000), z=ifelse(runif(10000) > 0.5, 'a', 'b')); df$y <- runif(10000); df$y[df$z == 'b'] <- cos(df$x[df$z == 'b']*10)
ggplot(df) + geom_point(aes(x, y, color=z), alpha=0.1)
Run Code Online (Sandbox Code Playgroud)
给出以下结果:

由于这些点非常透明,因此很难在图例中看到它们.我想从图例中删除点透明度,以便图形如下所示:

这怎么可能?
以下是Xorshift RNG 的基本实现(复制自维基百科):
uint32_t xor128(void) {
static uint32_t x = 123456789;
static uint32_t y = 362436069;
static uint32_t z = 521288629;
static uint32_t w = 88675123;
uint32_t t;
t = x ^ (x << 11);
x = y; y = z; z = w;
return w = w ^ (w >> 19) ^ (t ^ (t >> 8));
}
Run Code Online (Sandbox Code Playgroud)
我理解这w是返回的值x,y并且z是状态("内存")变量.但是,我无法理解多个内存变量的目的.谁能解释我这一点?
另外,我尝试将上面的代码复制到Python:
class R2:
def __init__(self):
self.x = x = 123456789
self.y …Run Code Online (Sandbox Code Playgroud)