第6节,修改numpy数组的值和维度


通过索引可以修改python的列表,numpy数组同样支持该操作,除此之外,我们还可以对数组的维度进行修改,这个是python列表无法支持的。

1. 根据索引修改numpy数组里的元素

import numpy as np

array_1 = np.ones(2)
print(array_1)      # [1. 1.]

array_1[0] = 100
print(array_1)      # [100.   1.]

array_2 = np.zeros((3, 4))
print(array_2)

array_2[2][2] = 100
print(array_2)

我在程序里,通过索引对数组里的元素进行修改,程序输出结果

[1. 1.]
[100.   1.]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[  0.   0.   0.   0.]
 [  0.   0.   0.   0.]
 [  0.   0. 100.   0.]]

2. 使用reshape函数修改numpy数组的维度

我先创建一个拥有12个元素的一维ndarray,然后使用reshape方法将数组的维度修改为(3, 4), 数组从一维变成了二维, 最后使用reshape方法将数组的维度修改为(12, ), 从二维降为一维。

强调一点,所谓修改数组的维度,并不是修改原数组,而是返回一个新的数组。

import numpy as np

array = np.arange(12)
print(array)

array = array.reshape((3, 4))       # 1维变2维
print(array)

array = array.reshape((12, ))       # 2维变1维
print(array)

程序输出结果

[ 0  1  2  3  4  5  6  7  8  9 10 11]

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
 
[ 0  1  2  3  4  5  6  7  8  9 10 11]

3. 给数组增加新的轴(维度)

给数组增加新的轴(维度),有两种方法,一种是使用np.newaxis增加维度,一种是np.expand_dims增加维度,它们可以让一维数组变成二维数组,二维变三维,以此类推。

3.1 np.newaxis

import numpy as np

array = np.array([1, 2, 3, 4, 5, 6])
array = array[:, np.newaxis]
print(array)
print(array.shape)

array最初被创建为一维数组,添加了一个新的轴,变成了二维数组,程序输出结果

[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]
(6, 1)

np.newaxis 加入的位置不同,生成的二维数组的维度也会不同,上面的例子二维数组的维度是(6, 1), 6行1列,下面的例子,我将生成一个1行6列的二维数组

import numpy as np

array = np.array([1, 2, 3, 4, 5, 6])
array = array[np.newaxis, :]
print(array)
print(array.shape)

程序输出结果

[[1 2 3 4 5 6]]
(1, 6)

3.2 np.expand_dims

使用和3.1 相同的例子,先生成一个6行1列的二维数组

import numpy as np

array = np.array([1, 2, 3, 4, 5, 6])
array = np.expand_dims(array, axis=1)
print(array)
print(array.shape)

程序输出

[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]
(6, 1)

如果让参数axis的值为0,则生成一个1行6列的二维数组

import numpy as np

array = np.array([1, 2, 3, 4, 5, 6])
array = np.expand_dims(array, axis=0)
print(array)        # [[1 2 3 4 5 6]]
print(array.shape)  # (1, 6)

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案