通过索引可以修改python的列表,numpy数组同样支持该操作,除此之外,我们还可以对数组的维度进行修改,这个是python列表无法支持的。
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.]]
我先创建一个拥有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]
给数组增加新的轴(维度),有两种方法,一种是使用np.newaxis增加维度,一种是np.expand_dims增加维度,它们可以让一维数组变成二维数组,二维变三维,以此类推。
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.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