Je voudrais savoir pourquoi mon code suivant ne produit pas un 1. sur les côtés gauche et droit de la matrice:

import numpy as np
import matplotlib.pyplot as plt

N = 10
def dungeon(N):
    dungeon = np.zeros((N, N))
    # Top and bottom
    dungeon[0] = 1
    dungeon[-1] = 1
    
    # Right side
    #dungeon[1][0] = 1
    #dungeon[2][0] = 1
    # etc...
    dungeon[0:3][0]
    
    print(dungeon)

Pourquoi le donjon [0: 3] [0] ne sort-il pas 1. dans la colonne de gauche? Comment puis-je résoudre ce problème sans écrire individuellement donjon [1] [0], donjon [2] [0], etc ...?

-1
zampoan 25 janv. 2021 à 06:42

2 réponses

Meilleure réponse

Vous générez une matrice 10x10.

dungeon[0] = 1 définit tous les éléments de la 1ère ligne sur 1.

dungeon[-1] = 1 définit tous les éléments de la dernière ligne sur 1.

Vous n'avez pas défini les côtés droit et gauche.

Il existe deux façons de générer une matrice 10x10 contenant des 0 au centre et des 1 sur les côtés:

dungeon = np.ones((10, 10))
dungeon [1:-1, 1:-1] = 0

OU

dungeon = np.zeros((10, 10))
dungeon[0:N,0:1] = 1
dungeon[0:N,-1:N] = 1
dungeon[0:1,0:N] = 1
dungeon[-1:N,0:N] = 1

PRODUCTION:

[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
1
ahmadjanan 25 janv. 2021 à 04:01

Prenez juste la transposition!

import numpy as np
  
N = 10
def dungeon(N):
    dungeon = np.zeros((N, N))
    # Top and bottom
    dungeon[0] = 1
    dungeon[-1] = 1

    # Right and left side
    dungeon = dungeon.T
    dungeon[0] = 1
    dungeon[-1] = 1

    print(dungeon)
1
pwasoutside 25 janv. 2021 à 03:57
65878699