numpy笔记一:数组

时间:2022-04-04 01:36:36

一 数组(Arrays)

使用array函数创建时,参数必须是由方括号括起来的列表,而不能使用多个数值作为参数调用array。

一个numpy数组是一个由不同数值组成的网格。网格中的数据都是同一种数据类型,可以通过非负整型数的元组来访问。维度的数量被称为数组的阶,数组的大小是一个由整型数构成的元组,可以描述数组不同维度上的大小。

1 创建数组

import numpy as np
a = np.zeros((2,2))        # 创建一个全是零的数组
print (a)             # Prints "[[ 0. 0.]
                         # [ 0. 0.]]"
b = np.ones((1,2))        # 创建一个全是1的数组
print (b)              # Prints "[[ 1. 1.]]"
c = np.full((2,2), 7)       # 创建一个恒定值得数组
print (c)               # Prints "[[ 7. 7.]
                           # [ 7. 7.]]"
d = np.eye(2)              # 创建一个 2x2 单位矩阵
print (d)               # Prints "[[ 1. 0.]
                           # [ 0. 1.]]"
e = np.random.random((2,2))    # Create an array filled with random values
print (e)                    # Might print "[[ 0.91940167 0.08143941]
                                   # [ 0.68744134 0.87236687]]"
2 数组的方法

(1)numpy.shape():

输入参数:类似数组(比如列表,元组)等,或是数组

返回:一个整型数字的元组,元组中的每个元素表示相应的数组每一维的长度

# 一维列表
L = range(5)
a=np.shape(L)
print(a)


# 二维列表
A = [[1,2,3],[4,5,6]]
b = np.shape(A)
print(b)
(5,)
(2, 3)
(2)numpy.reshape( a,newshape,order):

函数功能:给予数组一个新的形状,而不改变它的数据

输入参数:

a:将要被重塑的类数组或数组

newshape:整数值或整数元组。新的形状应该兼容于原始形状。如果是一个整数值,表示一个一维数组的长度;如果是元组,一个元素值可以为-1,此时该元素值表示为指定,此时会从数组的长度和剩余的维度中推断出

order:可选(忽略)

返回:一个新的形状的数组

A = [[1,2,3],[4,5,6]]
b = np.reshape(A,6)
c = np.reshape(A,(3,-1))
print(b)
print(c)
[1 2 3 4 5 6]
[[1 2]
 [3 4]
 [5 6]]

(3)ndarray.ndim:数组的维数(即数组轴的个数),等于秩。最常见的为二维数组(矩阵)

(4)ndarray.size:数组元素的总个数,等于shape属性中元组元素的乘积

3 访问数组

(1)切片:和Python列表类似,numpy数组可以使用切片语法。因为数组可以是多维的,所以你必须为每个维度指定
好切片

import numpy as np
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(a)
b = a[:2,1:3]
print(b)
print(a[0,1])
b[0,0] = 77
print(a[0,1])
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
[[2 3]
 [6 7]]
2
77
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(a)
row_r1 = a[1,:]
row_r2 = a[1:2,:]
print(row_r1,row_r1.shape)
print(row_r2,row_r2.shape)
col_r1 = a[:,1]
col_r2 = a[:,1:2]
print(col_r1 ,col_r1.shape)
print(col_r2 ,col_r2.shape)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
[5 6 7 8] (4,)
[[5 6 7 8]] (1, 4)
[ 2  6 10] (3,)
[[ 2]
 [ 6]
 [10]] (3, 1)
(2)整型数组访问:当我们使用切片语法访问数组时,得到的总是原数组的一个子集。整型数组访问允许我们利用其它
数组的数据构建一个新的数组:

a =np.array([[1,2],[3,4],[5,6]])
print(a)
print(a[[0,1,2],[0,1,0]])
print(a[[0,0],[1,1]])
print(np.array([a[0,1],a[0,1]]))
[[1 2]
 [3 4]
 [5 6]]
[1 4 5]
[2 2]
[2 2]
整型数组访问语法还有个有用的技巧,可以用来选择或者更改矩阵中每行中的一个元素:

a =np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(a)
b = np.array([0,2,0,1])
print(a[np.arange(4),b])
a[np.arange(4),b] +=10
print(a)
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[ 1  6  7 11]
[[11  2  3]
 [ 4  5 16]
 [17  8  9]
 [10 21 12]]
(3)布尔型数组访问:布尔型数组访问可以让你选择数组中任意元素。通常,这种访问方式用于选取数组中满足某些条
件的元素

a = np.array([[1,2], [3, 4], [5, 6]])
bool_idx = (a > 2)  
print bool_idx     # 打印   "[[False False]
                            # [ True True]
                            # [ True True]]"
print a[bool_idx]  # 打印 "[3 4 5 6]"
print a[a > 2]     # 打印"[3 4 5 6]"