numpy数组操作

import numpy as np

0. 生成等差数列

np.arange(0, 10, 1, dtype=int) =  [0 1 2 3 4 5 6 7 8 9]  #大于等于0, 小于10,步长为1的等差数列

np.arange(10) = [0 1 2 3 4 5 6 7 8 9]   #默认大于等于0, 小于10,步长为1的等差数列

1. 生成多维数组,并批量初始化元素

1.1生成2*3初始值为0的数组

np.zeros((2, 3), dtype=int) = [[0 0 0]
          [0 0 0]]

1.2生成2*3*2初始值为1的数组

np.ones((2, 3, 2), dtype=int) =  [[[1 1]
    [1 1]
    [1 1]]

  [[1 1]
   [1 1]
   [1 1]]]

2. 初始化两个二维数组

a = np.array([[1, 2], [1, 1]])
b = np.array([[1, 2], [1, 1]])

print结果:

a= [[1 2]
 [1 1]]
b= [[1 2]
 [1 1]]

3.数组乘法*运算, 用来将两个shape相同的数组对应位置的数据相乘,生成相同shape的新数组

a * b = [[1 4]
           [1 1]]

4. 矩阵乘法,用dot方法进行计算,两个矩阵中的行列向量点积,生成新的矩阵

a.dot(b) = [[3 4]
               [2 3]]

5. 算数运算都是按照逐个元素进行

log(a) = [[ 0.          0.69314718]
            [ 0.          0.        ]]

sin(a) = [[ 0.84147098  0.90929743]
           [ 0.84147098  0.84147098]]

a - 1 = [[0 1]
           [0 0]]

6. +=,-= 和*=将修改原数组的元素

a *= 2

print a

[[2 4]
 [2 2]]

7. 聚合函数,按照某个axis进行聚合计算

np.sum(a) = 5    #所有axis上的元素求和

np.sum(a, axis=0) = [2 3]  #axis=0的维度进行求和,压缩行

np.sum(a, axis=1) = [3 2]  #axis=1的维度进行求和, 压缩列

类似的:

np.min()   np.max()  求指定axis维度的元素最小、最大值.

np.argmax()   求指定axis维度的元素最大值的索引:

np.argmax(a, axis=1)  = [1 0]

np.cumsum() 指定axis维度元素向前累计求和

np.cumsum(a, axis=1) = [[1 3]
  [1 2]]

8. 取二维数组的部分行列元素

a[[0, 1], [1]] = [2 1]    #取[0,1]行,[1]列的元素,对原数组元素的引用,修改会改变原数组的值

a[0, :] = [1 2]           #取0行所有列元素,对原数组元素的引用,修改会改变原数组的值

9. 多维数组遍历,以第一个轴为基础

for r in a:
    print 'r = ', r

r =  [1 2]
r =  [1 1]

10. 数组元素迭代器,按照轴的优先级依次取元素

for e in a.flat:
    print e

1 2 1 1

11. 数组的形状

a.shape = (2, 2)

12. 改变数组的形状,不改变元素的值;reshape改变形状并返回新数组,resize改变原数组的形状

12.1  a.reshape((4, 1)) = [[1]
     [2]
     [1]
     [1]]

12.2  a.resize((1, 4))
print a

[[1 2 1 1]]

12.3 a.ravel() = [1 2 1 1]    # 将多维数组拉平成一维数组

13. 条件语句生成新数组

语法1: np.where(condition, x, y)  如果condition满足,则返回x, 否则返回y;注意condition可以是矩阵的条件

#如果a数组的元素>1则返回1,否则返回0,生成新数组

令a=[[1 2 3], [1 0 5]] 则:

np.where(a > 1, 8, 0) = [[0 8 8]

           [0 0 8]]

语法2:np.where(condition) 返回满足condition的元素的坐标

令a=[[1 2 3], [1 0 5]] 则:

np.where(a > 1) = (array([0, 0, 1]) , array([1, 2, 2]))   表示仅坐标为(0, 1) (0, 2) (1, 2)的元素满足>1的条件,前一个array记录行坐标,后一个array记录列坐标

14. 数组排序,可以指定axis

x = np.array([1, 2], [2, 1])

x.sort()     #改变原数组元素的排列

x = [[1 2]
      [1 2]]

==========

x = np.array([4, 8, 6, 3])
indexers = x.argsort()

indexers = [3 0 2 1]    #排序后,原索引的位置

x[indexers] = [3 4 6 8]  #根据索引得到排序后的数组


更多请参考:http://blog.csdn.net/sinat_32547403/article/details/54017551

你可能感兴趣的:(machine-learn)