Wednesday, February 08, 2017

Numpy.interp的问题

前几天写一个code,遇到Numpy.interp不正常工作的情况,具体的表现是无论是什么值的插值,最后都变成array最后一个元素的对应值。查了一下栈溢出,发现这是一个已知问题,原因是自变量array并不是单调递增的。遇到这种情况,需要把自变量和函数变量都反向才行:

x = x[::-1]
y = y[::-1]

然后内插值就可以正常工作了。

Sunday, September 11, 2016

我应该多读一下评论……

MoonKnight在我一年前的一则post里说:

List, dictionary, set, tuple etc. are all objects (classes) in python. When copying an object in python, the default way is to do a "shallow copy". 
Basically x=y just copy the reference (or pointer if you are more familiar with C) of x to y, so now they point to the same address in your memory. Thus change one will automatically change the other.If you want a "deep copy" (a separate copy with a different memory address) for a list, you can do x=list(y). There is also a package called copy, with a function called deepcopy, so x=copy.deepcopy(y) should do the same.On the other hand, the difference of "shallow copy" and "deep copy" only exists for objects. If you are copying an integer, string, boolean etc. It can only create a deep copy.

我要是早点看到就没今天这个问题了……

Python的数组赋值问题

今天晚上写code遇到如下问题:

Code1:

a=0
b=6
while b!=a:
    a=b
    print a
    b=b-1
    print a
这段代码将陷入死循环,输出如下:
6
6
5
5
4
4
... 

Code2:
a=[0]
b=[6]
while b!=a:
    a=b
    print a
    b[0]=b[0]-1
    print a 
这段代码在第一个循环结束就停了,输出如下:
[6]
[5] 

这个网站有讨论。 主要原因是,python的list名字其实是一个指针。假设有两个list,分别为a和b,如果赋值a=b,并不是建立一个新的list a,使其内容跟b一样,而是将a和b同时指向一个list对象。

所以,如果有如下两个list:

a=[0,1]
b=[0,1]
# a==b: TRUE
# a is b: FALSE

Tuesday, December 08, 2015

Latex Lineno的问题

之前写文章用Latex遇到过几次行号在有公式的段落不显示的情况。比如如下情况:
这里“where we define”这一句就没有行号。

这一段的源代码是
where we define
$$P_{th}(T_m)=a(T_m-T_0)+c(T_m^2-T_0^2) \eqno{(5)}$$
如果把源代码改成:
 where we define
          (中间空一行)
$$P_{th}(T_m)=a(T_m-T_0)+c(T_m^2-T_0^2) \eqno{(5)}$$

就可以正常显示了:

Saturday, September 12, 2015

Python的几个注意事项

最近在研究python。发现了以下一些和matlab不太一样的部分。特立此存照。

1. Python里面,a=4,则a是整数,a=4.0,则a是浮点数。a=4,则a/3==1

2. 两个list,X=[1,2,3], Y=[1,2,3], X.append(4), Y.append(4),则X==[1,2,3,4], Y==[1,2,3,4]
但是: X=[1,2,3], Y=X, X.append(4), Y.append(4),则X==[1,2,3,4,4], Y==[1,2,3,4,4]