Numpy的形状重塑

一. 形状改变

  1. reshape
    reshape可以改变数组的形状,但是元素总数必须保持一致。它返回的是原数组的视图,改变形状,但是内容共享。
arr=np.array([[2,3,4],[6,7,8]])
a=arr.reshape((3,2))
print(a)
a[1]=1
print(arr)

Out:
[[2 3]
 [4 6]
 [7 8]]

[[2 3 1]
 [1 7 8]]
  1. 其他3个函数都是展开为一维数组,除了flatten是返回一个一维数组副本,其他都是在原数组上迭代。
arr=np.array([[2,3,4],[6,7,8]])
a=arr.flatten()
a[1]=1
print(a)
print(arr)

Out:
[2 1 4 6 7 8]

[[2 3 4]
 [6 7 8]]

二. 翻转(转置)

transpose和属性T完全等效,就是转置,他们返回的是视图。

arr=np.array([[2,3,4],[6,7,8]])
print(arr,arr.T)

Out:
[[2 3 4]
 [6 7 8]]

 [[2 6]
 [3 7]
 [4 8]]

三. 连接

numpy.concatenate((a1, a2, ...), axis)
该函数可以连接多个数组,但是要求连接的维度是相匹配的,不匹配怎么连接啊!!下图中栗子,如果改成axis=1,横向拼接,则因为行数不匹配,会报错。

arr=np.array([[2,3,4],[6,7,8]])
arr1=np.ones((1,3))
print(arr1,arr)
print(np.concatenate((arr1,arr)))

Out:
[[1. 1. 1.]] 

[[2 3 4]
 [6 7 8]]

[[1. 1. 1.]
 [2. 3. 4.]
 [6. 7. 8.]]

四. 分割

  1. split
    numpy.split(ary, indices_or_sections, axis)
  • ary:被分割的输入数组
  • indices_or_sections:可以是整数,表明要分割的子数组的数量。 如果此参数是一维数组,则表明分割点下标。
  • axis:默认为 0
arr=np.array([[2,3,4],[6,7,8],[1,1,1],[0,0,0]])
a=np.split(arr,[1,2])
print(a)

Out:
[array([[2, 3, 4]]),   array([[6, 7, 8]]),   array([[1, 1, 1],[0, 0, 0]])]
  1. hsplit、vsplit
    numpy.hsplit是split()函数的特例,其中轴为 1 表示水平分割,无论输入数组的维度是什么。
    numpy.vsplit是split()函数的特例,其中轴为 0 表示竖直分割,无论输入数组的维度是什么。

你可能感兴趣的:(Numpy的形状重塑)