python numpy基础

                                                  python numpy基础

numpy基础用法的代码,以后自己可以查的笔记

# -*- coding: utf-8 -*-
import numpy as np

#1、数组(ndarray) 创建
aa=[1,2,3,4]
a_=np.array(aa)
print a_

aaa=np.arange(6)
bbb=np.arange(0,6,2)
print aaa
print bbb

a=np.array([1,2,3,4,5,6,7],dtype=np.float32)
print a.shape
print a.ndim
print a.dtype
am=a.astype(np.int32)   #改变数组的数据类型
print am.dtype
print type(a)
print a

b=np.array([[1.0,2.0,3.0],[4.0,5.0,6.0]],dtype=np.float64)
print b.shape
print b.dtype
print type(b)
print b

c=np.zeros((2,2))
print c

d=np.ones((3,3))
print d

e=np.full((3,3),6)
print e

f=np.eye(5)
print f

g=np.random.random((6,6))
print g

h=np.random.randn(3,4)
print h

j=np.empty((3,3))
print j

a = np.linspace(0,10,7) # 生成首位是0,末位是10,含7个数的等差数列
print(a)

# 2、ndarray的矢量化计算
#矢量运算:相同大小的数组间的运算应用在元素上
#矢量和标量运算:“广播”— 将标量“广播”到各个元素
# 运算符	说明
# +	矩阵对应元素相加
# -	矩阵对应元素相减
# *	矩阵对应元素相乘
# /	矩阵对应元素相除,如果都是整数则取商
# %	矩阵对应元素相除后取余数
# **	矩阵每个元素都取n次方,如**2:每个元素都取平方
a1 = np.array([[4,5,6],[1,2,3]])
a2 = np.array([[6,5,4],[3,2,1]])
print(a1+a2)  #+
print(a1/a2)  #-
print(a1%a2) #%
print(a1*a2) #*
print (a1**2)# **平方
print(a1*2)

x=np.array([1,2,3])
print x>2
y = np.array([3,4,5])
print x>y



# 3、 数组切片  重要!!!!
    #切片:和Python列表类似,numpy数组可以使用切片语法。因为数组可以是多维的,所以你必须为每个维度指定好切片。
qAq = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
qBq=qAq[:2, 1:3]
print qBq
print qBq.shape

qbq1=qAq[2,3]  #get the value of element
qbq2=qAq[0]
qbq3=qAq[2][3]
print qbq1
print qbq2
print qbq3

    # 你可以同时使用整型和切片语法来访问数组。但是,这样做会产生一个比原数组低阶的新数组
abc = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

    # Two ways of accessing the data in the middle row of the array.
    # Mixing integer indexing with slices yields an array of lower rank,
    # while using only slices yields an array of the same rank as the
    # original array:
row_r1 = abc[1, :]    # Rank 1 view of the second row of a
row_r2 = abc[1:2, :]  # Rank 2 view of the second row of a
print row_r1, row_r1.shape  # Prints "[5 6 7 8] (4,)"
print row_r2, row_r2.shape  # Prints "[[5 6 7 8]] (1, 4)"

    # We can make the same distinction when accessing columns of an array:
col_r1 = abc[:, 1]
col_r2 = abc[:, 1:2]
print col_r1, col_r1.shape  # Prints "[ 2  6 10] (3,)"
print col_r2, col_r2.shape  # Prints "[[ 2]
                            #          [ 6]
                            #          [10]] (3, 1)"

    # 一个小技巧,没想到还有这种操作呢
ab = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])

    # Create an array of indices
ba = np.array([0, 2, 0, 1])

    # Select one element from each row of a using the indices in b
print ab[np.arange(4), ba]  # Prints "[ 1  6  7 11]"

    # Mutate one element from each row of a using the indices in b
ab[np.arange(4), ba] += 10

print ab  # prints "array([[11,  2,  3],
         #                [ 4,  5, 16],
         #                [17,  8,  9],
         #                [10, 21, 12]])

    #一维数组也可以哦~~~
abcd=np.array([1,2,3,4,5,6])
print abcd[[0,2,3,1]]


# 4、布尔索引
ap = np.array([[1,2], [3, 4], [5, 6]])

bool_idx = (ap > 2)  # Find the elements of a that are bigger than 2;
                    # this returns a numpy array of Booleans of the same
                    # shape as a, where each slot of bool_idx tells
                    # whether that element of a is > 2.

print bool_idx      # Prints "[[False False]
                    #          [ True  True]
                    #          [ True  True]]"

# We use boolean array indexing to construct a rank 1 array
# consisting of the elements of a corresponding to the True values
# of bool_idx
print ap[bool_idx]  # Prints "[3 4 5 6]"

# We can do all of the above in a single concise statement:
print ap[ap > 2]     # Prints "[3 4 5 6]"

#5、矩阵运算

#1) 元素级别
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
print x + y            #(1)
print np.add(x, y)  #(2)

print x - y
print np.subtract(x, y)

print x * y   #不是矩阵乘法,对应元素相乘
print np.multiply(x, y)

print x / y    #对应元素相除
print np.divide(x, y)

print np.sqrt(x) #通用函数(ufunc)是一种对ndarray中的数据执行元素级运算的函数。更多函数可查询:https://blog.csdn.net/cxmscb/article/details/54583415

# 2) 在Numpy中使用dot来进行矩阵乘法:
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])

v = np.array([9,10])
w = np.array([11, 12])

# Inner product of vectors; both produce 219
print v.dot(w)
print np.dot(v, w)

# Matrix / vector product; both produce the rank 1 array [29 67]
print x.dot(v)
print np.dot(x, v)

# Matrix / matrix product; both produce the rank 2 array
# [[19 22]
#  [43 50]]
print x.dot(y)
print np.dot(x, y)

#3) 用于统计的函数sum mean
x = np.array([[1,2],[3,4]])
print np.sum(x)  # Compute sum of all elements; prints "10"
print np.sum(x, axis=0)  # Compute sum of each column; prints "[4 6]"
print np.sum(x, axis=1)  # Compute sum of each row; prints "[3 7]"

print np.mean(x)  # Compute mean of all elements;
print np.mean(x, axis=0)  # Compute mean of each column;
print np.mean(x, axis=1)  # Compute mean of each row;

print np.max(x)  # Compute max of all elements;
print np.max(x, axis=0)  # Compute max of each column;
print np.max(x, axis=1)  # Compute max of each row;

print np.min(x)  # Compute min of all elements;
print np.min(x, axis=0)  # Compute min of each column;
print np.min(x, axis=1)  # Compute min of each row;

print np.argmax(x)  # Compute argmax of all elements;
print np.argmax(x, axis=0)  # Compute argmax of each column;
print np.argmax(x, axis=1)  # Compute argmax of each row;

print np.argmin(x)  # Compute argmin of all elements;
print np.argmin(x, axis=0)  # Compute argmin of each column;
print np.argmin(x, axis=1)  # Compute argmin of each row;

print np.std(x) #标准差
print np.std(x,0)
print np.std(x,1)

print np.var(x)  #方差
print np.var(x,0)
print np.var(x,1)

y=np.array([1,2,3,4,5])
print np.cumsum(y) #所有元素累积和

print np.cumprod(y) #所有元素累积积

# 4) 矩阵转置和轴对换
print x.T    #easy

k = np.arange(8).reshape(2,2,2)
print k
m=k.transpose((1,0,2)) # m[y][x][z] = k[x][y][z]                                # 轴变换 transpose 参数:由轴编号组成的元组
print m

m = k.swapaxes(0,1) # 将第一个轴和第二个轴交换 m[y][x][z] = k[x][y][z] # 轴交换 swapaxes (axes:轴),参数:一对轴编号
print m


# 5) ndarray 去重复计算
print 'ndarray的唯一化和集合运算'
x =np.array([[1,6,2],[6,1,3],[1,5,2]])
print np.unique(x) # [1,2,3,5,6]
y = np.array([1,6,5])
print np.in1d(x,y) # [ True  True False  True  True False  True  True False]
print np.setdiff1d(x,y) # [2 3]
print np.intersect1d(x,y) # [1 5 6]

# 6 numpy的线性代数
#import numpy.linalg 模块。线性代数(linear algebra) 常用的numpy.linalg模块函数:更多函数查询文档
x = np.array([[1,2],[3,4]])
y = np.array([[1,3],[2,4]])
z=np.linalg.inv(x)
z1=np.linalg.det(x)
U,S,V=np.linalg.svd(x)

# 7 numpy数组的reshape 数组重塑
print 'ndarray数组重塑'
x = np.arange(0,6) #[0 1 2 3 4]
print x #[0 1 2 3 4]
print x.reshape((2,3)) # [[0 1 2][3 4 5]]  ###重要  返回的是副本,不改变数组本身
print x #[0 1 2 3 4]
print x.reshape((2,3)).reshape((3,2)) # [[0 1][2 3][4 5]]
yy = np.array([[1,1,1],[1,1,1]])
x = x.reshape(y.shape)
print x # [[0 1 2][3 4 5]]
print x.flatten() # [0 1 2 3 4 5]    ########重要 展开矩阵为一维数组
x.flatten()[0] = -1 # flatten返回的是拷贝
print x # [[0 1 2][3 4 5]]
print x.ravel() # [0 1 2 3 4 5]
x.ravel()[0] = -1 # ravel返回的是视图(引用)
print x # [[-1 1 2][3 4 5]]
print "维度大小自动推导"
arr = np.arange(15)
print arr.reshape((5, -1))   # 15 / 5 = 3 列
print arr.reshape((-1, 5))   # 15 / 5 = 3 行

# 8、矩阵合并
a1=np.array([[1,2],[3,4]])
a2=np.array([[5,6],[7,8]])
# #方式1:
print np.hstack([a1,a2])  #行合并
print np.vstack([a1,a2])  #列合并
# #方式2:
np.concatenate((a1,a2),axis=0)   #行
np.concatenate((a1,a2),axis=1)   #列

 

猜你喜欢

转载自blog.csdn.net/ouyangfushu/article/details/84875596
今日推荐