https://blog.youkuaiyun.com/qq_34840129/article/details/86295482
重点: https://blog.youkuaiyun.com/u013044310/article/details/80407220
reshape(shape) : 不改变数组元素,返回一个shape形状的数组,原数组不变。是对每行元素进行处理
resize(shape) : 与.reshape()功能一致,但修改原数组
-
In [
1]: a = np.arange(
20)
-
#原数组不变
-
In [
2]: a.reshape([
4,
5])
-
Out[
2]:
-
array([[
0,
1,
2,
3,
4],
-
[
5,
6,
7,
8,
9],
-
[
10,
11,
12,
13,
14],
-
[
15,
16,
17,
18,
19]])
-
-
In [
3]: a
-
Out[
3]:
-
array([
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
-
17,
18,
19])
-
-
#修改原数组
-
In [
4]: a.resize([
4,
5])
-
-
In [
5]: a
-
Out[
5]:
-
array([[
0,
1,
2,
3,
4],
-
[
5,
6,
7,
8,
9],
-
[
10,
11,
12,
13,
14],
-
[
15,
16,
17,
18,
19]])
.swapaxes(ax1,ax2) : 将数组n个维度中两个维度进行调换,不改变原数组
-
In
[6]:
a
.swapaxes(1,0)
-
Out
[6]:
-
array(
[[ 0, 5, 10, 15],
-
[ 1, 6, 11, 16],
-
[ 2, 7, 12, 17],
-
[ 3, 8, 13, 18],
-
[ 4, 9, 14, 19]])
.flatten() : 对数组进行降维,返回折叠后的一维数组,原数组不变
-
In [
7]: a.flatten()
-
Out[
7]:
-
array([
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
-
17,
18,
19])
将多个二维数组合并为一个三维数组
方法一:
对于两个(或者多个)同一维度的矩阵,直接利用np.array()重新构造一个array,这样可以变相起到扩展维数的作用。例如:
-
import numpy
as np
-
-
a = np.
array([[
1,
2,
3],[
4,
5,
6]])
-
b = np.
array([[
2,
2,
3],[
4,
5,
6]])
-
c = np.
array([[
3,
2,
3],[
4,
5,
6]])
-
print(
'矩阵a:\n',a)
-
print(
'维数:',a.shape)
-
-
com = np.
array([a,b,c])
-
print(
'合并矩阵:\n',com)
-
print(
'维数:',com.shape)
-
-
输出结果为:
-
-
矩阵a:
-
[[
1
2
3]
-
[
4
5
6]]
-
维数: (
2,
3)
-
合并矩阵:
-
[[[
1
2
3]
-
[
4
5
6]]
-
-
[[
2
2
3]
-
[
4
5
6]]
-
-
[[
3
2
3]
-
[
4
5
6]]]
-
维数: (
3,
2,
3)
方法二:
但是,如果两个array,使用方法一时会出现如下结果:
-
import numpy
as np
-
-
aa = np.
array([[[
1,
2,
3],[
4,
5,
6]],[[
2,
2,
3],[
4,
5,
6]],[[
3,
2,
3],[
4,
5,
6]]])
-
a = np.
array([[
4,
2,
3],[
4,
5,
6]])
-
-
com = np.
array([aa,a])
-
print(
'合并矩阵:\n',com)
-
print(
'维数:',com.shape)
-
-
输出结果:
-
-
合并矩阵:
-
[
array([[[
1,
2,
3],
-
[
4,
5,
6]],
-
-
[[
2,
2,
3],
-
[
4,
5,
6]],
-
-
[[
3,
2,
3],
-
[
4,
5,
6]]])
-
array([[
4,
2,
3],
-
[
4,
5,
6]])]
-
维数: (
2,)
可以看到:输出的维数不对,以上方法就不适用了。
那么,我们就需要利用np.append和array.reshape()函数对数组进行拼接之后重组,具体实现如下:
-
import numpy
as np
-
-
aa = np.
array([[[
1,
2,
3],[
4,
5,
6]],[[
2,
2,
3],[
4,
5,
6]],[[
3,
2,
3],[
4,
5,
6]]])
-
a = np.
array([[
4,
2,
3],[
4,
5,
6]])
-
data = np.append(aa,a)
#先拼接成一个行向量
-
print(data)
-
-
dim = aa.shape
#获取原矩阵的维数
-
print(
'原矩阵维数:',dim)
-
data1 = data.reshape(dim[
0]+
1,dim[
1],dim[
2])
#再通过原矩阵的维数重新组合
-
-
print(
'合并矩阵:\n',data1)
-
print(
'维数:',data1.shape)
现在来看一下用reshape将二维数据升为三维后的数据分布情况:
-
from numpy
import *
-
b = arange(
36).reshape((
6,
6))
-
b1 = b.reshape(
2,
3,
6)
b的元素:
b1的元素:
可以看到,原来6*6的矩阵被分为了2个3*6的矩阵。每一行的数据分布并没有改变,只是将前3行划为一个维度,然后将后三行划为另一个维度。
方法三:
相比于前两种方法,这种方法可谓“曲线救国”之典范,具体思路是:先转化成list,拼接后再转化回去。
这是因为list中的append()函数可以在添加函数的时候不改变原来list的维度。虽然没有对这种方法进行一个速度测试,但直觉来看时间复杂度挺高的,建议慎用。
-
aa = np.array([[[
1,
2,
3],[
4,
5,
6]],[[
2,
2,
3],[
4,
5,
6]],[[
3,
2,
3],[
4,
5,
6]]])
-
a = np.array([[
4,
2,
3],[
4,
5,
6]])
-
-
#将array转换成list
-
aa = aa.tolist(aa)
-
a = a.list(a)
-
-
aa.append(a)
#注意与方法二中np.append()用法的区别
-
com = np.array(aa)
-
print(com.shape)
-
-
输出结果:
-
-
合并矩阵:
-
[
[[1 2 3]
-
[
4 5 6]]
-
-
[
[2 2 3]
-
[
4 5 6]]
-
-
[
[3 2 3]
-
[
4 5 6]]
-
-
[
[4 2 3]
-
[
4, 5, 6]]]
-
维数: (
4,
2,
3)
这里注意:
两种类型的相互转换函数:
array转list:a = a.tolist()
list转array:a =np.array(a)
原文:https://blog.youkuaiyun.com/u013044310/article/details/80407220
原文:https://blog.youkuaiyun.com/brucewong0516/article/details/79185282