[python] numpy axis概念整理筆記

整理一下numpy和pandas中 axis(軸)的概念

以一個3x3 numpy array當做範例

ndarray = numpy.arange(1,10).reshape(3,3)

[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
axis(軸)的基本示意圖:


ndarray[0] 表示取軸0的第0項,也就是ndarray[0][:] 取軸0第一項然後對應的軸1每項都要

ndarray[0][1] 表示先選取軸0的第0項,接著再對應取軸1的第1項

ndarray[:][0:2] 表示軸0的項目全部都要,但只取每一項的軸1的0到1項

ndarray.sum(axis = 1) -> array([ 6, 15, 24])
表示將軸1的各項相加,但不將軸0合併(合併了軸0就等於一般ndarray.sum()的結果了),也就是軸0的各項分別各自將其軸1各項相加(每列各自將其對應軸0各項相加)

在pandas的函式中 axis參數的使用

先建立一個DataFrame及需要用到的lambda函式
frame2 = DataFrame(np.arange(1,10).reshape(3, 3), columns = list((0,1,2)), index = list((0,1,2)))

frame2.apply(f, axis = 0) 表示將函式應用到軸0,
以範例而言就是從軸0各項中取最大項減最小項,不合併軸1 (每行各自從其對應軸0各項中取max減min)


frame2.apply(f, axis = 1) 表示將函式應用到軸1,
也就是每列各自從其對應軸1各項取max減min


hadoop datanode未成功啟動的處理

hadoop進行多次 namenode format後,可能就會有啟動hadoop後datanode卻未啟動的狀況,原因是namenode format後,hadoop就會重新配置其namespaceIdc,解決方法是在datanode節點將datanode的version檔案配置修改使其與namenode的version檔案配置一致。
1.開啟namenode的version文件查看配置(通常位在$HADOOP_HOME/hadop_data/hdfs/namenode/current)

2.開啟datanode節點的version(通常位在$HADOOP_HOME/hadoop_data/hdfs/datanode/current)將namespaceID修改使其與namenode節點的namespaceID一致(datanode的version文件可能不只一個,請在$HADOOP_HOME/hadoop_data/hdfs/datanode/下多找幾層,若有namespaceID的將其修改,若沒有也不要特別多加上去)

3.通常修改namespaceID後應該就可以成功啟動datanode了,但可能我換過hadoop主機的IP配置,所以導致其他項目也跟著跑掉,若修改完namespaceID後仍無法順利啟動datanode請修改datanode的version文件將clusterID、blockpoolID也修改與namenode的version文件一致。

Comments