当前位置: 首页 > 知识库问答 >
问题:

像图像一样用正方形重塑数组

凌恩
2023-03-14

我想在python中重塑一个数组(首先是numpy数组),使第一个索引处的每个元素都成为该数组中的一个正方形/象限,而不是常规的将所有元素都包含在一行中的重塑。

作为一个例子,我创建了这个数组,您可以将其解释为一个图像。我给它添加了一些值,这样我们就可以清楚地看到每个元素属于哪一行、哪列和哪条通道:

import numpy as np

X = np.zeros((8,6,3)) #8 rows, 6 columns, 3 channels (imagine RGB channels)
for i in range(3):
    X[:,:,i] += i+1   #the last digit in the array elements are channels
for i in range(6):
    X[:,i,:] += 10*(i+1)  #the second digit in elements are columns
for i in range(8):
    X[i,:,:] += 100*(i+1) #the first digit in elements are rows  

打印此数组显示:

[[[ 111.  112.  113.]
  [ 121.  122.  123.]
  [ 131.  132.  133.]
  [ 141.  142.  143.]
  [ 151.  152.  153.]
  [ 161.  162.  163.]]

 [[ 211.  212.  213.]
  [ 221.  222.  223.]
  [ 231.  232.  233.]
  [ 241.  242.  243.]
  [ 251.  252.  253.]
  [ 261.  262.  263.]]
 ...
  • 所以,很明显,第一个索引被分组为图像行(在每个较大的组中,第一个数字是常数)
  • 第二个索引是列,它们在大索引中的每个较小的组中变化
  • 最后一个索引是通道,它们在较小的组中逐个更改元素。
[
    [
        [
            [ 111.  112.  113.]
            [ 121.  122.  123.]
        ]
        [
            [ 131.  132.  133.]
            [ 141.  142.  143.]
        ]
    ]
    [
        [
            [ 151.  152.  153.]
            [ 161.  162.  163.]
        ]
        [
            [ 211.  212.  213.]
            [ 221.  222.  223.]
        ]
    ]

....

我如何正确有效地重塑它,以便第一个索引返回正方形(2行,2列),如下所示:

[
    [
        [
            [ 111.  112.  113.]
            [ 121.  122.  123.]
        ]
        [
            [ 211.  212.  213.]
            [ 221.  222.  223.]             
        ]
    ]
    [
        [
            [ 131.  132.  133.]
            [ 141.  142.  143.]
        ]
        [
            [ 231.  232.  233.]
            [ 241.  242.  243.]                
        ]
    ]
    [
        [
            [ 151.  152.  153.]
            [ 161.  162.  163.]
        ]
        [
            [ 251.  252.  253.]
            [ 261.  262.  263.]
        ]
    ]
    [
        [
            [ 311.  312.  313.]
            [ 321.  322.  323.]
        ]
        [
            [ 411.  412.  413.]
            [ 421.  422.  423.]
        ]
    ]

   ....

共有1个答案

范瀚昂
2023-03-14

您需要重塑+转置/swapaxes+重塑:

X.reshape(4,2,3,2,3).swapaxes(1,2).reshape(12,2,2,3)

给予:

array([[[[ 111.,  112.,  113.],
         [ 121.,  122.,  123.]],

        [[ 211.,  212.,  213.],
         [ 221.,  222.,  223.]]],


       [[[ 131.,  132.,  133.],
         [ 141.,  142.,  143.]],

        [[ 231.,  232.,  233.],
         [ 241.,  242.,  243.]]],


       [[[ 151.,  152.,  153.],
         [ 161.,  162.,  163.]],

        [[ 251.,  252.,  253.],
         [ 261.,  262.,  263.]]],


       [[[ 311.,  312.,  313.],
         [ 321.,  322.,  323.]],

        [[ 411.,  412.,  413.],
         [ 421.,  422.,  423.]]],
 类似资料:
  • 我知道实际上用CSS修改图像是不可能的,这就是为什么我在引号中加了crop。 我想做的是拍摄矩形图像,并使用CSS使其显示为方形,而不会扭曲图像。 我基本上想把这个: 对此:

  • 在 material design 中,图像(无论是绘画还是摄影)都应该是组建而成而并非人为策划的,看起来神奇并且不显得过度制作。这种风格乐观,愉悦,并且坦率。这种风格比较强调场景的实质性(Materiality),质感,深度,让人意想不到的色彩运用, 以及对环境背景的关注。这些原则都旨在创建目的性强,美丽又有深度的用户界面。 原则 当使用绘画和摄影提升用户体验时,选择能够表达个人关联、信息和令人

  • 我的目标是使图像圆形并显示它。如果图像是方形的,那么我可以通过简单地使用CSS的属性将其转换为圆形。但是当图像是矩形时,使用这个CSS属性会给我椭圆形的图像。 剪辑的部分是不可见的,但仍然存在。所以即使现在我也在尝试使用属性,它给我椭圆形图像,右侧和左侧被剪辑。 我有什么办法可以解决这个问题吗?

  • 问题内容: 我正在寻找如何以新的大小重新采样表示图像数据的numpy数组,最好选择插值方法(最近,双线性等)。我知道有 通过包装PIL的调整大小功能可以做到这一点。唯一的问题是,由于它使用PIL,因此numpy数组必须符合图像格式,最多可以提供4个“颜色”通道。 我希望能够使用任意数量的“彩色”通道来调整任意图像的大小。我想知道是否有简单的方法可以在scipy / numpy中执行此操作,或者是否

  • 问题内容: tl; dr是否 可以在不使用numpy.reshape的情况下将numpy数组的视图从5x5x5x3x3x3重塑为125x1x1x3x3x3? 我想对一个体积(大小为MxMxM)执行一个滑动窗口操作(具有不同的步幅)。如本杰明(Benjamin)和艾肯伯格(Eickenberg)先前建议的那样,可以使用生成滑动窗口数组,并在下面的代码片段中进行了演示,该代码片段使用了skimage中

  • 主要内容:圆角图片,实例,椭圆图片,实例,缩略图,实例,图片对齐方式,实例,图片居中,实例,响应式图片,实例圆角图片 .rounded 类可以让图片显示圆角效果: 实例 <img decoding="async" src="cinqueterre.jpg" class="rounded" alt="Cinque Terre"> 椭圆图片 .rounded-circle 类可以设置椭圆形图片: 实例 <img decoding="async" src="cinqueterre.jpg" class