Numpy入门教程练习作业1打卡
数组的创建
import numpy as np
x=np.arrange(3)
print(x)
# [0 1 2 3 4 ]
创建布尔数组
import numpy as np
arr = np.full([3, 3], True, dtype=np.bool)
print(arr)
# [[ True True True]
# [ True True True]
# [ True True True]]
提取奇数
import numpy as np
arr = np.arange(10)
# 方法1
index = np.where(arr % 2 == 1)
print(arr[index])
# [1 3 5 7 9]
import numpy as np
arr = np.arange(10)
# 方法2
x = arr[arr % 2 == 1]
print(x)
# [1 3 5 7 9]
将个别元素替换为0
import numpy as np
arr = np.arange(10)
index = np.where(arr % 2 == 0)
arr[index] = 0
print(arr)
# [0 1 0 3 0 5 0 7 0 9]
在在不影响原始数组的情况下替换满足条件的元素项
import numpy as np
arr = np.arange(10)
# 用where方法
x = np.where(arr % 2 == 0, 0, arr)
print(x)
# [0 1 0 3 0 5 0 7 0 9]
print(arr)
# [0 1 2 3 4 5 6 7 8 9]
# 用copy的方法
x = np.copy(arr)
x[x % 2 == 0] = 0
print(x)
# [0 1 0 3 0 5 0 7 0 9]
print(arr)
# [0 1 2 3 4 5 6 7 8 9]
数组的操作
改变数组的形状
import numpy as np
arr = np.arange(10)
# 用reshape函数来改变函数的形状
x = np.reshape(arr, newshape=[2, 5])
print(x)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
垂直叠加两个数组
import numpy as np
a = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])
#用来重复数字1,重复10次
print(a)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
print(b)
# [[1 1 1 1 1]
# [1 1 1 1 1]]
# concatenate函数
print(np.concatenate([a, b], axis=0))
# [[0 1 2 3 4]
# [5 6 7 8 9]
# [1 1 1 1 1]
# [1 1 1 1 1]]
# vstack函数。。。没见过(战术捂脸)
print(np.vstack([a, b]))
# [[0 1 2 3 4]
# [5 6 7 8 9]
# [1 1 1 1 1]
# [1 1 1 1 1]]
水平叠加两个数组
import numpy as np
a = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])
print(a)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
print(b)
# [[1 1 1 1 1]
# [1 1 1 1 1]]
# 熟练运用这俩函数
print(np.concatenate([a, b], axis=1))
# [[0 1 2 3 4 1 1 1 1 1]
# [5 6 7 8 9 1 1 1 1 1]]
# 方法2
print(np.hstack([a, b]))
# [[0 1 2 3 4 1 1 1 1 1]
# [5 6 7 8 9 1 1 1 1 1]]
获取数组的公共项
用到intersrct1d函数
import numpy as np
a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])
x = np.intersect1d(a, b)
print(x) # [2 4]
从一个数组a中删除另外一个数组的所有项
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array([5, 6, 7, 8, 9])
x = np.setdiff1d(a, b)
print(x) # [1 2 3 4]
获取数组a和b之间匹配的位置
import numpy as np
a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])
mask = np.equal(a, b)
# 方法1
x = np.where(mask)
print(x) # (array([1, 3, 5, 7], dtype=int64),)
# 方法2
x = np.nonzero(mask)
print(x) # (array([1, 3, 5, 7], dtype=int64),)
从numpy数组中提取给定范围的所有元素
比如获得5到10之间的元素
import numpy as np
a = np.array([2, 6, 1, 9, 10, 3, 27])
mask = np.logical_and(np.greater_equal(a, 5), np.less_equal(a, 10))
# 方法1
x = np.where(mask)
print(a[x]) # [ 6 9 10]
# 方法2
x = np.nonzero(mask)
print(a[x]) # [ 6 9 10]
# 方法3
x = a[np.logical_and(a >= 5, a <= 10)]
print(x) # [ 6 9 10]
交换数组中的列1和列2,好比线代里面列变换。
import numpy as np
arr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
x = arr[:, [2, 1, 0]]
print(x)
# [[2 1 0]
# [5 4 3]
# [8 7 6]]
交换行
import numpy as np
arr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
x = arr[[1, 0, 2], :]
print(x)
# [[3 4 5]
# [0 1 2]
# [6 7 8]]
索引与切片
翻转二维数组的行
import numpy as np
arr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
x = arr[::-1, :]
print(x)
# [[6 7 8]
# [3 4 5]
# [0 1 2]]
翻转二维数组的列
import numpy as np
arr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
x = arr[:, ::-1]
print(x)
# [[2 1 0]
# [5 4 3]
# [8 7 6]]
创建一个二维数组,包含5到10之间的随机数
import numpy as np
x = np.random.randint(5, 10, [5, 3])
print(x)
# [[5 8 8]
# [5 6 8]
# [8 8 7]
# [6 7 9]
# [6 5 8]]
x = np.random.uniform(5, 10, [5, 3])
print(x)
# [[6.73675226 8.50271284 9.66526032]
# [9.42365472 7.56513263 7.86171898]
# [9.31718935 5.71579324 9.92067933]
# [8.90907128 8.05704153 6.0189007 ]
# [8.70753644 7.75056151 5.71714203]]
对数组中的元素进行格式化,比如只打印小数点后三位。
import numpy as np
rand_arr = np.random.random([5, 3])
print(rand_arr)
# [[0.33033427 0.05538836 0.05947305]
# [0.36199439 0.48844555 0.26309599]
# [0.05361816 0.71539075 0.60645637]
# [0.95000384 0.31424729 0.41032467]
# [0.36082793 0.50101268 0.6306832 ]]
np.set_printoptions(precision=3)
print(rand_arr)
# [[0.33 0.055 0.059]
# [0.362 0.488 0.263]
# [0.054 0.715 0.606]
# [0.95 0.314 0.41 ]
# [0.361 0.501 0.631]]
将numpy数组a中打印的项数限制为最多6个元素,这样可以避免冗杂。
import numpy as np
a = np.arange(15)
print(a)
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
np.set_printoptions(threshold=6)
print(a)
# [ 0 1 2 ... 12 13 14]
打印完整的数组而不中断。
import numpy as np
a = np.arange(15)
np.set_printoptions(threshold=6)
print(a)
# [ 0 1 2 ... 12 13 14]
np.set_printoptions(threshold=np.iinfo(np.int).max)
print(a)
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]