考虑以下:
A = np.zeros((2,3))
print(A)
[[ 0.  0.  0.]
 [ 0.  0.  0.]]
这对我来说很有意义.我告诉numpy做一个2x3矩阵,这就是我得到的.
但是,以下内容:
B = np.zeros((2, 3, 4))
print(B)
给我这个:
[[[ 0.  0.  0.  0.]
  [ 0.  0.  0.  0.]
  [ 0.  0.  0.  0.]]
 [[ 0.  0.  0.  0.]
  [ 0.  0.  0.  0.]
  [ 0.  0.  0.  0.]]]
这对我来说没有意义.难道我不是要制作一个有4个2x3矩阵的立方体吗?我更加困惑,因为虽然数据结构看起来不正确,但切片的工作原理与计划完全一致:
print(B[:,:,1])
[[ 0.  0.  0.]
 [ 0.  0.  0.]]
我错过了关于如何构造这些数组的东西,但我不确定是什么.有人可以解释我缺少或不理解的东西吗?
非常感谢!
unu*_*tbu 17
NumPy数组首先迭代最左边的轴.因此,如果B具有形状(2,3,4),则B[0]具有形状(3,4)并B[1]具有形状(3,4).从这个意义上讲,你可以认为B是2个形状阵列(3,4).您可以在repr中看到两个数组B:
In [233]: B = np.arange(2*3*4).reshape((2,3,4))
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],       <-- first (3,4) array 
        [ 8,  9, 10, 11]],
       [[12, 13, 14, 15],
        [16, 17, 18, 19],      <-- second (3,4) array 
        [20, 21, 22, 23]]])
您还可以B通过迭代最后一个索引来考虑包含四个2x3数组:
for i in range(4):
    print(B[:,:,i])
# [[ 0  4  8]
#  [12 16 20]]
# [[ 1  5  9]
#  [13 17 21]]
# [[ 2  6 10]
#  [14 18 22]]
# [[ 3  7 11]
#  [15 19 23]]
但你可以很容易地想到B三个2x4阵列:
for i in range(3):
    print(B[:,i,:])
# [[ 0  1  2  3]
#  [12 13 14 15]]
# [[ 4  5  6  7]
#  [16 17 18 19]]
# [[ 8  9 10 11]
#  [20 21 22 23]]
NumPy数组以这种方式非常灵活.但至于repr的B来讲,你看到对应于两个(3×4)阵列,因为B在最左边的轴第一迭代.
for arr in B:
    print(arr)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]
# [[12 13 14 15]
#  [16 17 18 19]
#  [20 21 22 23]]
我希望下面的例子能澄清你的问题的第二部分,你在输入时询问获得 2X3 矩阵 print(B[:,:,1])
import numpy as np
B = [[[1,2,3,4],
  [5,6,7,8],
  [9,10,11,12]],
 [[13,14,15,16],
  [17,18,19,20],
  [21,22,23,24]]]
B = np.array(B)
print(B)
print()
print(B[:,:,1])
[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]
 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]
[[ 2  6 10]
 [14 18 22]]
由于B的尺寸2X3X4,这意味着你有大小两个矩阵3X4至于reprB的关注
现在B[:,:,1]我们正在通过:,:并且1。First:表示我们正在选择两个3X4矩阵。第二个:表示我们正在从两个3X4矩阵中选择所有行。第三个参数1表示我们只从两个3X4矩阵中选择所有行的第二列值。因此我们得到
[[ 2  6 10]
 [14 18 22]]
| 归档时间: | 
 | 
| 查看次数: | 17679 次 | 
| 最近记录: |