【问题标题】:How to assign ones and zeros to specific indices of an array using numpy?如何使用 numpy 将 1 和 0 分配给数组的特定索引?
【发布时间】:2019-10-30 16:03:38
【问题描述】:

我想以如下特定方式构造一个 6 x 9 的矩阵,其中包含 0 和 1 项。在第 0 行列中,0 到 2 应为 1,在第一行列中,3 到 5 应为 1,在第二行列中,6 到 8 应为 1,所有其他条目均为零。在第三行,元素 0,3,6 应该是 1,另一个应该是 0。在第四行,元素 1,4,7 应该是 1,其他元素应该是 0。在第五行,2、5、8 应该是 1,其余的应该是 0。一半的行按照一种方式输入值 1,而另一半行按照不同的过程输入值 1。如何扩展这个大约 20 x 100 的情况,其中前 10 行遵循上面提到的一个过程,而后半部分遵循不同的过程

6x9 by 矩阵如下所示

[[1,1,1,0,0,0,0,0,0],
 [0,0,0,1,1,1,0,0,0],
 [0,0,0,0,0,0,1,1,1],
 [1,0,0,1,0,0,1,0,0],
 [0,1,0,0,1,0,0,1,0],
 [0,0,1,0,0,1,0,0,1]]
 EDIT: Code I used to create this matrix:
 import numpy as np
 m=int(input("Enter the value of m, no. of points = "))
 pimatrix=np.zeros((2*m +1)*(m**2)).reshape((2*m+1),(m**2))
 for i in range(2*m + 1):
    for j in range(m**2):
        if((i<m) and ((j<((i+1)*m) and j>=(i*m)))): 
           pimatrix[i][j]=1
        if (i>(m-1)):
           for k in range(-1,m-1,1):
              if(j == i+(k*m)):
                pimatrix[i][j]=1 
        if i==2*m:
           pimatrix[i][j]=1
 print(pimatrix)            

【问题讨论】:

  • 你在做作业时遇到了什么问题?
  • 澄清一下,SO 不是免费的编码网站。请努力解决这个问题,或者如果你已经有,请展示你的工作。有问题时问一个具体问题。
  • 您的逻辑的一般规则是什么,既可以应用于 6x9 矩阵,也可以应用于 20 x 100 矩阵?

标签: python numpy matrix


【解决方案1】:

尝试使用numpy.put函数numpy.put

【讨论】:

    【解决方案2】:

    最佳方法取决于您计划遵循的规则,但一种简单的方法是将数组初始化为一个零数组:

    import numpy as np
    
    a = np.zeros([3, 4], dtype = int)
    

    然后,您可以编写逻辑来遍历相应的行并根据需要设置 1。您可以通过其坐标简单地访问数组的任何元素:

    a[2,1] = 1
    
    print(a)
    

    结果:

    [[0 0 0 0]
     [0 0 0 0]
     [0 1 0 0]]
    

    如果没有一般规则,很难说出您想要的逻辑到底是什么,但假设这些规则:数组的上半部分在每一行连续运行三个,从左上角开始向下移动一行在每次运行结束时,直到它到达上半部分的底部,在那里它环绕到顶部;下半部分有单个运行,遵循相同的模式。

    用你给定的例子来实现它:

    import numpy as np
    
    a = np.zeros([6, 9], dtype=int)
    
    
    def set_ones(a, run_length, start, end):
        for n in range(a.shape[1]):
            a[start + ((n // run_length) % (end - start)), n] = 1
    
    
    set_ones(a, 3, 0, a.shape[0] // 2)
    set_ones(a, 1, a.shape[0] // 2, a.shape[0])
    
    print(a)
    

    结果:

    [[1 1 1 0 0 0 0 0 0]
     [0 0 0 1 1 1 0 0 0]
     [0 0 0 0 0 0 1 1 1]
     [1 0 0 1 0 0 1 0 0]
     [0 1 0 0 1 0 0 1 0]
     [0 0 1 0 0 1 0 0 1]]
    

    【讨论】:

    • 我已经为此编写了代码,但我觉得那太长了。该代码本身是另一个程序的一部分。所以我真的很想知道python是否可以用任何其他简单的方式很容易地做到这一点。
    • 您似乎在询问智能算法而不是 Python 实现。另外,我认为您在问题中的描述需要进一步解释。目前尚不清楚您希望在更大的情况下会发生什么以及您希望解决方案完全遵循哪些规则。
    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2019-01-04
    • 2019-11-08
    • 1970-01-01
    • 2019-11-28
    • 2019-11-13
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多