numpy笔记(二)

运算

numpy默认乘为逐个元素相乘,如果想计算矩阵乘法,可用@或dot函数

1
2
3
4
A=np.array([[1,1],[0,1]])
B=np.array([[2,0],[3,4]])
A@B
A.dot(B)

形状变换

a.ravel()扁平化

a.T转置

a.reshape((2,-1,3)),-1代表自适应形状

合并

np.column_stack((a,b))仅对1维数组有用,2维数组与np.hstack((a,b))相同

1
2
3
4
5
a=np.array([4,2])
b=np.array([3,8])
np.column_stack((a,b))
>>> array([[4, 3],
[2, 8]])

普通的相等只是给个引用,不会创建一个新变量

1
2
3
4
5
6
7
8
>>> a=np.arange(12).reshape(3,4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> b=a
>>> b is a
True

narray.view()会创建个数组,使用原数组的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>>> c = a.view()
>>> c is a
False
>>> c.base is a
True
>>> c.flags.owndata
False
>>> c = c.reshape((2, 6))
>>> a.shape
(3, 4)
>>> c[0, 4] = 1234
>>> a
array([[0,1,2,3],
[1234,5,6,7],
[8,9,10,11]])
>>> s = a[ : , 1:3]
>>> s[:] = 10
>>> a
array([[0,10,10,3],
[1234,10,10,7],
[8,10,10,11]])

深拷贝创建一个新的变量

1
2
3
4
5
6
7
8
9
10
11
12
>>> d=a.copy()
>>> d.base is a
False
>>> d[1,1]=1234
>>> d
array([[ 0, 1, 2, 3],
[ 4, 1234, 6, 7],
[ 8, 9, 10, 11]])
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
1
2
3
a=np.arange(int(1e8))
b=a.copy()
del a

若使用b=a,则执行del a后,a仍然在内存里