如何使用numpy为数组的特定索引分配1和0?

2024-06-25 07:02:37 发布

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

我想构建一个6×9的矩阵,用一种特殊的方式,输入0和1,如下所示。在第0行列中,0到2应该是1,在第一行列中,3到5应该是1,在第二行列中,6到8应该是1,所有其他条目都是0。在第三行中,元素0、3、6应该是一个,另一个应该是零。在第四行中,元素1、4、7应为一,其他元素应为零。在第五行中,2、5、8应为1,其余应为0。一半的行按一种方式输入值1,另一半的行按不同的步骤输入值1。如果前10行遵循上面提到的一个过程,而后半行遵循不同的过程,那么如何将此扩展到20 x 100

6x9 by matrix外观如下

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

Tags: andofin元素forif过程np
1条回答
网友
1楼 · 发布于 2024-06-25 07:02:37

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

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

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

用你的例子来实现这一点:

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

相关问题 更多 >