此数组中有多少列/行?

2024-10-04 05:26:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这可能是一个愚蠢的问题(请告诉我)。 当我打印出一个具有形状(2493452)的数组时,应该有2行,对吗?为什么它看起来像下面的多行(例如,第一行是[0 0…0 0]),然后对于第二个输出(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)

Tags: 代码imageimg数组cv2jpg形状print
2条回答

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

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

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

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

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

在讨论这些索引数组时,行/列没有太多意义

看一个较小的案例(来自另一个最近的SO,How to get all indices of NumPy array, but not in a format provided by 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]])]

当您有一个形状为(2, 493, 452)的numpy数组并在控制台上打印出来时,numpy将像打印两个形状为(493, 452)的数组一样进行打印。这让我很长一段时间都感到厌烦。也许您正在考虑原始数组,比如452个shape (2, 493)数组,在这种情况下,您可能希望控制台输出有所不同

即使控制台输出与您期望的不匹配,形状也总是由arr.shape给出

相关问题 更多 >