首页 > 解决方案 > 这个数组中有多少列/行?

问题描述

我知道这可能是一个愚蠢的问题(请告诉我)。当我打印出一个形状为 (2, 493, 452) 的数组时,应该有 2 行吧?为什么它看起来像下面的多行(例如第一行是 [0 0 0...0 0 0])然后对于第二个输出(2, 222836),这意味着有 2 行和 222836 列?

(2, 493, 452)
[[[  0   0   0 ...   0   0   0]
  [  1   1   1 ...   1   1   1]
  [  2   2   2 ...   2   2   2]
  ...
  [490 490 490 ... 490 490 490]
  [491 491 491 ... 491 491 491]
  [492 492 492 ... 492 492 492]]

 [[  0   1   2 ... 449 450 451]
  [  0   1   2 ... 449 450 451]
  [  0   1   2 ... 449 450 451]
  ...
  [  0   1   2 ... 449 450 451]
  [  0   1   2 ... 449 450 451]
  [  0   1   2 ... 449 450 451]]]
(2, 222836)
[[  0   0   0 ... 492 492 492]
 [  0   1   2 ... 449 450 451]]

这是我的代码:

original_image=cv2.imread("mickey mouse.jpg")
img=cv2.cvtColor(original_image,cv2.COLOR_BGR2RGB)
vectorized=img.reshape((-1,3))
#print(vectorized.shape)
#print(vectorized)
ind=np.indices((m,n))
print(ind.shape)
print(ind)

ind.resize((2,m*n))
print(ind.shape)
print(ind)

标签: pythonnumpy

解决方案


indices为 2 个维度中的每一个创建“索引”:

ind=np.indices((m,n))
print(ind.shape)
print(ind)

所以结果是一个 (2,m,n) 数组。 ind[9,:,:]是第一维的索引,一个 (m,n) 数组。

实际上这应该是reshape,但它从原始的 . (2, m*n) 形状数组ind

ind.resize((2,m*n))
print(ind.shape)
print(ind)

在谈论这些索引数组时,行/列没有多大意义。

看一个较小的案例(来自另一个最近的 SO,如何获取 NumPy 数组的所有索引,但不是 np.indices() 提供的格式

In [71]: list(np.ndindex(3,2))
Out[71]: [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
In [72]: np.indices((3,2))
Out[72]: 
array([[[0, 0],
        [1, 1],
        [2, 2]],

       [[0, 1],
        [0, 1],
        [0, 1]]])

meshgrid做同样的事情,但作为 2 个数组的列表:

In [75]: np.meshgrid(np.arange(3),np.arange(2),indexing='ij')
Out[75]: 
[array([[0, 0],
        [1, 1],
        [2, 2]]),
 array([[0, 1],
        [0, 1],
        [0, 1]])]

推荐阅读