我想用一个特定的方式构造一个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)
答案 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]]