如何使用numpy将一和零分配给数组的特定索引?

时间:2019-06-17 04:53:44

标签: python numpy matrix

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

6x9矩阵矩阵如下

[[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)            

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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]]