1.如何生成一个ndarray
"""
是python语言的一个library
只支持矩阵操作和运算
由C语言写成,非常高效
pandas也是基于Numpy构建的一个library
现在流行的机器学习框架 Tensorflow/PyTorch 等等,语法都与Numpy比较接近
"""
import numpy as np
def main():
"""怎样去构建一个 nd_array"""
"""构建一个一维的 nd_array"""
a_list = [1, 2, 3]
nd_array = np.array(a_list)
print(type(nd_array), nd_array)
nd_array[0] = 5
print(type(nd_array), nd_array)
print(nd_array.shape)
"""构建一个二维的 nd_array"""
b_list = [[1, 2, 3], [2, 3, 4]]
nd_array = np.array(b_list)
print(type(nd_array), nd_array)
nd_array[0, 1] = 5
print(type(nd_array), nd_array)
print(nd_array.shape)
"""有一些内置的创建数组的函数"""
a_array = np.zeros((2, 3))
print(type(a_array), a_array)
b_array = np.ones((3, 3))
print(type(b_array), b_array)
l_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
clone_array = np.empty_like(l_array)
print("=" * 50, clone_array)
"""自定制数组"""
c_array = np.full((2, 2), 9.0)
print(type(c_array), c_array)
"""创建一个对角线矩阵"""
d_array = np.eye(3)
print(type(d_array), d_array)
"""创建随机的nd_array"""
e_array = np.random.random((2, 3))
print(type(e_array), e_array)
"""生成指定范围内的array"""
f_array = np.arange(0, 10, 2)
print(type(f_array), f_array)
"""array 有不同的数据类型:int32(默认整数类型), int64(支持的整数范围更大), float64(默认小数类型)"""
int_array = np.arange(0, 10, 3)
float_array = np.array([1.2, 1.3, 1.4])
int_array = int_array.astype(dtype=float_array.dtype)
print(int_array.dtype, int_array)
if __name__ == '__main__':
main()
2.array_indexing_数组取值与赋值
"""
是python语言的一个library
只支持矩阵操作和运算
由C语言写成,非常高效
pandas也是基于Numpy构建的一个library
现在流行的机器学习框架 Tensorflow/PyTorch 等等,语法都与Numpy比较接近
"""
import numpy as np
def main():
"""
学习 numpy_array 的取值与赋值
Numpy 提供了很多种取值的方式
"""
a_array = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(a_array, a_array.shape)
b_array = a_array[:2, 1:]
print(b_array, b_array.shape)
c_array = a_array[1:2, :]
print(c_array, c_array.shape)
d_array = a_array[1:2, :]
d_array[0, 0] = 100
print(d_array, d_array.shape)
print(a_array)
e_array = a_array[1:2, :].copy()
e_array[0, 0] = 200
print(e_array)
print(a_array)
f_array = a_array[1, :]
print(f_array, f_array.shape)
g_array = a_array[[1], :]
print(g_array, g_array.shape)
h_array = a_array[:, 1::2]
print(h_array, h_array.shape)
i_array = a_array[:, 1]
j_array = a_array[:, 1:2]
k_array = a_array[:, [1]]
print(i_array, i_array.shape)
print(j_array, j_array.shape)
print(k_array, k_array.shape)
"""高级取值用法(advanced)"""
ad_array = np.array([[1, 2], [3, 4], [5, 6]])
a_ad_array = ad_array[[0, 1, 2], [0, 1, 0]]
print(a_ad_array, a_ad_array.shape)
b_ad_array = np.array([ad_array[0, 0], ad_array[1, 1], ad_array[2, 0]])
print(b_ad_array, b_ad_array.shape)
c_ad_array = ad_array[[0, 1], [1, 1]]
d_ad_array = np.array([ad_array[0, 1], ad_array[1, 1]])
print(c_ad_array, c_ad_array.shape)
print(d_ad_array, d_ad_array.shape)
ad_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
print(ad_array, ad_array.shape)
y = np.array([0, 1, 2, 1])
print(ad_array[np.arange(4), y])
ad_array[np.arange(4), y] += 10
print(ad_array, ad_array.shape)
fa_array = np.array([[1, 2], [3, 4], [5, 6]])
bool_index = (fa_array > 2)
print(bool_index, bool_index.shape)
print(fa_array[bool_index])
print(fa_array[fa_array > 2])
if __name__ == '__main__':
main()
3.numpy的基础运算
"""
是python语言的一个library
只支持矩阵操作和运算
由C语言写成,非常高效
pandas也是基于Numpy构建的一个library
现在流行的机器学习框架 Tensorflow/PyTorch 等等,语法都与Numpy比较接近
"""
import numpy as np
def main():
"""
学习 numpy_array 的基础运算
下面这些运算才是你在科学运算中经常会用到的
"""
x = np.array([[1, 2], [3, 4]], dtype=np.float64)
y = np.array([[7, 8], [9, 10]], dtype=np.float64)
print(x + y)
print(np.add(x, y))
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))
"""做矩阵的乘法运算,使用 matrix multiplication"""
v = np.array([9, 10])
w = np.array([10, 11])
z1 = v.dot(w)
print(v)
z2 = np.dot(v, w)
print(z1, z2)
a = np.array([[1, 2], [3, 4]], dtype=np.int32)
b = np.array([[5, 6], [7, 8]], dtype=np.int32)
print(np.dot(a, v))
print(np.dot(a, b))
"""转置,和数学公式一样,简单粗暴"""
print(a, a.T)
print(v, v.T)
w = np.array([[1, 2, 3]])
print(w, w.T)
"""常用的矩阵运算,求和、求平均值"""
s_array = np.array([[1, 2], [3, 4]])
print(np.sum(s_array))
print(s_array.sum())
print(np.sum(s_array, axis=0))
print(np.sum(s_array, axis=1))
print(np.mean(s_array, axis=0))
print(np.mean(s_array, axis=1))
print(np.cumsum(s_array, axis=0))
print(np.cumsum(s_array, axis=1))
print(np.cumprod(s_array, axis=0))
print(np.cumprod(s_array, axis=1))
if __name__ == '__main__':
main()
4.numpy数组排序
"""
是python语言的一个library
只支持矩阵操作和运算
由C语言写成,非常高效
pandas也是基于Numpy构建的一个library
现在流行的机器学习框架 Tensorflow/PyTorch 等等,语法都与Numpy比较接近
"""
import numpy as np
def main():
"""
学习 numpy_array 的排序
"""
r_array = np.random.randint(low=0, high=10, size=10, dtype=np.int32)
print(r_array, r_array.shape)
r_array.sort()
print(r_array)
t_array = np.random.randn(2, 3) * 10
print(t_array)
t_array.sort(1)
print(t_array)
s_array = np.random.randn(1000) * 10
s_array.sort()
print(s_array[int(0.05 * len(s_array))])
if __name__ == '__main__':
main()
5.numpy_broadcasting(重点)
"""
是python语言的一个library
只支持矩阵操作和运算
由C语言写成,非常高效
pandas也是基于Numpy构建的一个library
现在流行的机器学习框架 Tensorflow/PyTorch 等等,语法都与Numpy比较接近
"""
import numpy as np
def main():
"""
学习 numpy_broadcasting
作用是什么呢?我们设想一个场景,如果要用小的矩阵去和大的矩阵做一些操作,
但是希望小矩阵能循环和大矩阵的那些块做一样的操作,那极其需要broadcasting
"""
"""
我们要做一件事情,给 x 矩阵的每一行都逐元素加上一个向量,然后生成 y 矩阵
比较粗暴的方式是,用for循环逐个相加,这种方法当然可以了,问题是不高效,
如果 x 矩阵行数非常多,那就很慢的
"""
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
v = np.array([1, 0, 1])
y = np.empty_like(x)
print(y)
for i in range(4):
y[i, :] = x[i, :] + v
print(y)
y = x + v
print(x.shape, v.shape)
print(y)
v = np.array([1, 2, 3])
w = np.array([4, 5])
print(v.shape, w.shape)
v = v.reshape(3, 1)
print(v + w)
x = np.array([[1, 2, 3], [4, 5, 6]])
w = np.array([1, 2, 3])
print(x + w)
x = np.array([[1, 2, 3], [4, 5, 6]])
w = np.array([4, 5])
print(x.T)
print(x.T + w)
print(w.reshape(2, 1))
print(x + w.reshape(2, 1))
if __name__ == '__main__':
main()
6.numpy的逻辑运算
"""
是python语言的一个library
只支持矩阵操作和运算
由C语言写成,非常高效
pandas也是基于Numpy构建的一个library
现在流行的机器学习框架 Tensorflow/PyTorch 等等,语法都与Numpy比较接近
"""
import numpy as np
def main():
"""
学习 numpy 的逻辑运算
"""
x_array = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y_array = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
print(np.where(cond, x_array, y_array))
z_array = np.random.randn(2, 2)
print(z_array > 0)
print(np.where(z_array > 0, 1, -1))
"""一些高级的 nd_array 的处理"""
a_array = np.arange(8)
print(a_array, a_array.shape)
print(a_array.reshape(8, 1))
print(a_array.reshape(2, 4))
print(a_array.reshape(2, 2, 2))
other_array = np.ones((2, 4), dtype=np.int32)
print(other_array, other_array.shape)
b_array = np.arange(8)
c_array = b_array.reshape(other_array.shape)
print(c_array)
d_array = c_array.ravel()
print(d_array, d_array.shape)
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
print(np.concatenate((arr1, arr2), axis=0))
print(np.concatenate((arr1, arr2), axis=1))
print(np.vstack((arr1, arr2)))
print(np.hstack((arr1, arr2)))
arr = np.arange(0, 15).reshape(5, 3)
first, second, third = np.split(arr, [1, 3], axis=0)
print(first, "\n\n", second, "\n\n", third)
first, second, third = np.split(arr, [1, 3], axis=1)
print(first, "\n\n", second, "\n\n", third)
if __name__ == '__main__':
main()
7.numpy的文件输入输出
"""
是python语言的一个library
只支持矩阵操作和运算
由C语言写成,非常高效
pandas也是基于Numpy构建的一个library
现在流行的机器学习框架 Tensorflow/PyTorch 等等,语法都与Numpy比较接近
"""
import numpy as np
arr = np.loadtxt("array_name.txt", delimiter=",")
print(arr)
arr = np.arange(0, 10).reshape(2, 5)
print(arr)
np.save("some_array", arr)