如何打印一个模式使用1的加号的形式使用numpy数组

dfddblmv  于 2023-04-30  发布在  其他
关注(0)|答案(4)|浏览(159)

如何使用numpy数组打印一个1里面有0的加号图案!我需要满足所有的案子。我试过下面的代码!!
验证码:

n = int(input())
import numpy as np
x = np.zeros((n,n), dtype=int)
x[3:4] = 0
x[2:-1,2:3] = x[1:-1,2:3] = x[2:3] = x[0:-1,2:3] = x[4:,2:3]= 1
for i in range(n):
    for j in range(n):
        print(x[i][j] , end = " ")
    print()

输出:

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

k7fdbhmy1#

您可以使用中间元素为1(或True)的数组进行广播:

n = int(input("size: "))
import numpy as np

r = np.arange(n)==n//2
r = r*1 | r[:,None]
print(r)

输出:

size: 5
[[0 0 1 0 0]
 [0 0 1 0 0]
 [1 1 1 1 1]
 [0 0 1 0 0]
 [0 0 1 0 0]]

说明:

r = np.arange(n)==n//2

生成一个True/False数组,其中中间点(indice n//2)为True,所有其他条目为false:

[False, False, True, False, False]

如果你使用r[,:None]将这个1x 5数组转换为5x 1的形状,你会得到

[[False],
 [False],
 [ True],
 [False],
 [False]]

将这些True/False值乘以1将它们转换为数字,并且当每行在每列上广播时,二进制或运算符|将保留中间行和中间列中的数字:

(OR)  0 0 1 0 0
    -----------
 0  | 0 0 1 0 0
 0  | 0 0 1 0 0
 1  | 1 1 1 1 1
 0  | 0 0 1 0 0
 0  | 0 0 1 0 0

请注意,有许多方法可以实现这一点。
下面是另一个例子:

np.max(np.indices((n,n))==n//2,axis=0)*1
jq6vz3qz

jq6vz3qz2#

**假设是:****输入:**给定一个大于2的正奇数整数“n”。

下面是代码:

读取输入

n = int(input())

#导入NumPy包

import numpy as np

#创建一个全零的(n x n)数组

arr = np.zeros((n, n), dtype = int)

#使中间行和中间列都为1

arr[n//2, :] = 1

arr[: , n//2] = 1

#打印arr的最终值

print(arr)

#整个代码如下:

n = int(input())
import numpy as np 
arr = np.zeros((n, n), dtype = int)
arr[n//2, :] = 1
arr[: , n//2] = 1
print(arr)

n=3的样本输出:

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

n=5的样本输出:

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

n=7的样本输出:

[[0 0 0 1 0 0 0]
 [0 0 0 1 0 0 0]
 [0 0 0 1 0 0 0]
 [1 1 1 1 1 1 1]
 [0 0 0 1 0 0 0]
 [0 0 0 1 0 0 0]
 [0 0 0 1 0 0 0]]
58wvjzkj

58wvjzkj3#

这是另一个解决方案,您有一个零数组,并简单地将中间的行和列设置为1:

n = int(input())
a = np.zeros((n,n)).astype(int)
a[n//2,:]=a[:,n//2]=1
print(a)

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

ffscu2ro4#

# Read the input
n = int(input())

# Import the NumPy package
import numpy as np 

# Write your code here
arr = np.zeros((n,n), dtype=int)

for i in range(n):
  arr[i,-n//2] = 1 # fill 1 in every row with middle column

arr[-n//2,] = 1 # fill 1 at middle row in every column
print(arr)

相关问题