numpy数组不可以扩展
可是它最大的缺点就是不可动态扩展——“NumPy的数组没有这种动态改变大小的功能,numpy.append()函数每次都会重新分配整个数组,并把原来的数组复制到新数组中。
http://blog.chinaunix.net/uid-23100982-id-3164530.html
numpy数组的展平
可以用flatten,也可以用numpy.ravel()
比如下面这个数组
arr = np.arange(10).reshape(1,2,5)
Out[40]:
array([[[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]])
可以使用fatten和ravel函数进行展平
arr.flatten()
numpy.ravel(arr)
Out[41]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy数组合并
如果只有两个元素,那么用append合并就行
如果有三个或者以上的元素,那么用numpy.concatenate这个函数
numpy.concatenate((a1, a2, ...), axis=0)
把n个数组放到一个tuple里面,作为一个大参数(a1, a2, ...)放到concatenate这个函数里面
python list 合并
python list合并,可以用append,extend,也可以直接用+号进行
z=x+y
numpy 数组的初始化和循环填充
有的时候想新建个array,然后通过循环不断append补充这个数组。后来看到stackoverflow上说这个是非常低效率的。
numpy的array一般是先初始化好尺寸的数组,全附上0,然后再一个一个修改这个值。而不是不断的扩充数组结构。
比如下面这个就是不太推荐的写法
big_array # Initially empty. This is where I don't know what to specify
for i in range(5):
array i of shape = (2,4) created.
add to big_array
参考http://stackoverflow.com/questions/4535374/initialize-a-numpy-array
python目录遍历
一个用os库
一个用glob库
list,array,dataframe,mat 几个容器的使用
list如果能用就用,最底层,效率也最高的元素,而且支持字符和数字混搭
np的array付给他更多的操作,但是不支持字符,需要chararray才能混搭,chararray其实功能不是特别强大,所以不推荐numpy的数组里面混搭文字和数字
np的dataframe适合大小规模的选择和操作,但是不适合一点点增添,最好是先把一个大的array都鼓捣好了一个,一整个array直接全塞进去。
所以基本是简单的数据用list,需要做处理的中低层的数据用array,然后烩成一锅全装进dataframe做大规模范围的数据分析。 如果需要矩阵操作的时候才使用numpy的mat
这是我的理解。
许多python和numpy对某个数据的处理,不会改变数据本身,而是把结果拷贝出来输出给其他对象
比如s.join('something')
arr.append(arr2)
对dataframe columns的选择
dataframe一般都是根据标签选择列,比如dataframe['feature1']
同时也可以使用ix,按照列数进行选择,比如选择第一列和第二列 df.ix[:,0:2]
如果选择的是多个列,那么会返回的是dataframe对象
而如果只选择一个列,那么会返回series对象,这个比较蛋疼。
python format字符串的输出
str.format() //str是字符串
- format函数前的str字符串可以用{}来做占位符
‘a is {},b is {}’.format(a,b)
- 也可以在{}里面加数字用来和后面的变量进行对应
‘a is {1},b is {2}, a is {1}’.format(a,b)
-
还可以用讲里面的数字视为对象本身
比如lis=['xiaoming','xiaowang']
‘my name is {0[0]},his name is {0[1]}’.format(lis) -
{}里面还可以对输出的精度和进制进行输出
'the number is {:.2f}'.format(332.245)
'the binary value of the number is {:b}'.format(332.245)
dataframe之间做运算,要用到.values 除法
for i in range(len):
df3[i]=df1[i]-df2[i].values
一个dataframe,和另一个dataframe的values才可以做直接的运算
dataframe的slicing
df=pd.DataFrame()
df[1] #这个是不行的
df[1:2] #这样才行 有头有尾才行 或者写成df.ix[1,:] #最好用index进行slice的,都用.ix这个函数进行slice,这样规范一些。
dataframe每行都减去前一行 怎么实现(第一行保持原值
方法一:用index进行整体减法
df[:-1] -df[1:]
方法二: 自己笨笨的写循环呗。
for i in range(1,length):
df.ix[i,:]-df.ix[i-1,:]
方法三:调用shift方法,
df-df.shift(1) #df.shift(1) 就是df整体下移的结果,至于新dataframe的首行则为nan,需要自己再手动赋0
df.fillna(inplace=True, method='ffill') inplace就是自己替换自己了
两个120的数组如何合成一个220的数组?用asarray
np.asarray(np.random.randn(10),np.random.randn(10))
网友评论