numpy数组基本操作(小白教程):合并+取整+开方+矩阵所有元素变为负+相除+修改符号 以及一些基本的练习

合并:np.concatenate和np.stack

介绍两个方法:

方法1:np.concatenate()
 a = np.array([[1, 2], [3, 4]])
 b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)
array([[1, 2], 
          [3, 4],
          [5, 6]])

为了照顾小白,不得不说一下numpy数组中的维度的概念,那么numpy数组中的维度是什么意思呢?笔者认为维度就等于括号的数量,0维的意思就是打开第一个括号后,数据是不是就变成了[1, 2],和[3, 4],那么就直接在后面加上[5,6],就变成了[1,2],[3,4].[5,6],最后加上最外层的括号:[[1,2],[3,4].[5,6]]。
这个方法的问题:
这个方法无法把两个1维的array变成一个2维的array,当两个一维的array合并后仍然是一个一维的array

方法2: np.stack()
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.stack((a, b))
    array([[1, 2, 3],
           [4, 5, 6]])

这个方法和上面的方法用法一样,但他可以让两个1维的array变成一个2维的array。

添加:np.append

例子1:
np.append([1, 2, 3], [[4, 5, 6], [7, 8, 9]])
array([1, 2, 3, ..., 7, 8, 9])

例子2:
np.append([[1, 2, 3], [4, 5, 6]], [[7, 8, 9]], axis=0)
array([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]])

例子3:
# 这种写法会报错,读者可以在这停一下想想原因,在看后面的解释
np.append([[1, 2, 3], [4, 5, 6]], [7, 8, 9], axis=0)

该方法的意思是:把后面的加入到前面的array中,如果后面的维度>前面的维度,那么要想添加就要保证后面这个的最里面的括号的元素的个数以及形状要和前面的一致,就比如例子1中,后面的[[4, 5, 6], [7, 8, 9]]最里面的括号的元素是:[4, 5, 6],它和[1, 2, 3]的个数相同,形状也相同,那么可以把后面的加入到前面。
但如果后面的维度<前面的维度,那么就要保证后面的维度数量和前面的一直,并且最里面的括号的元素个数要相同,比如例子2中[[1, 2, 3], [4, 5, 6]]是2维的,那么[[7, 8, 9]]也是2维的,并且他们最里面的括号的元素个数和形状相同,分别是:[1, 2, 3]和[7, 8, 9]。那么为什么例子3会报错呢?很显然他不符合这条规则。

np.tile()

把一个矩阵作为基本元素,创建一个n*m的矩阵

np.tile([[0, 1], [1, 0]], (4, 4))

np.random.choice()

# 从0-10中随机选择20个数
np.random.choice(10, 20)

np.copysign

#Change the sign of x1 to that of x2, element-wise.If `x2` is a scalar, its sign will be copied to all elements of `x1`.
#逐元素把x1中的符号改成x2中的一致,如果x2是标量,那么它的元素就是x1中的每一个,并把它们的符号改成和x2一致。
np.copysign([-1, 0, 1], -1.1)

np.ceil()

作用:取整

np.sqrt()

作用:返回一个非负平方根

np.negative()

作用:把一个矩阵里面的全部元素变成负数

np.divide()

作用:两个对象做除法

数据归一化的作用

把数据限制到一定范围

每日一练(10题):

笔者在每一题后设置了分数,笔者认为打出来的分数依然可以对你的学习进行评估。(低于60:代表需要重新学习。60-80:恭喜你掌握了大部分,但有一些细节还需要加深。80-100:太好了,你的学习太棒了)
1.归一化一个6x6的随机矩阵(10)

a = np.random.random((6,6))
print(a)
print((a - a.mean()) / a.std()) # std 计算均方差

2.完成两个矩阵的点积(10)

a = np.random.randint(0, 9, (5, 3))
b= np.random.randint(0, 9, (3, 2))
print(np.dot(a,b))

3.把一维数组中大于5小于10的所有元素变成负数(10)

a = np.arange(2, 12)
a[(a >5) & (a <10)] *= -1 # 使用& 表示 and

4.对于浮点数数组取整(10)

a =np.random.uniform(-10,10 ,10)
print(a)
print(np.ceil(np.copysign(a,np.ones(10))))

5.查找两个数组的交集?(10)

np.intersect1d([1, 2, 3], [4, 2, 1])

6.忽略numpy的警告?(10)

defaults = np.seterr(all="ignore")

7.获取2022年8月的所有日期(10)

np.arange('2022-08', '2022-09', dtype='datetime64[D]')

8.抽取随机矩阵的整数部分(10)

np.floor(Z)

9.创建一个5x5每行为0到4的矩阵。(10)

np.tile(np.arange(5), (5, 1))

10.使用生成器创建一个大小为10的数组(10)

def gen(num):
    seed = 0
    for i in range(num):
        yield seed
        seed +=4
    return seed
print(np.array([x for x in gen(10)]))

你可能感兴趣的:(numpy,矩阵,线性代数)