Je prévois d'utiliser les numéros de Python à Swift, car je dois utiliser Swift pour des calculs mathématiques. Le code SWIFT est -
error: <Cell 3>:2:17: error: cannot call value of non-function type 'PythonObject'
let x = np.zeros(shape:(1, 2))
~~~~~~~~^
error: <Cell 3>:2:12: error: cannot invoke 'zeros' with an argument list of type '(shape: (Int, Int))'
let x = np.zeros(shape:(1, 2))
^
4 Réponses :
Pourrait-il être que vous n'appelez pas correctement les zéros? P>
Si ce que vous êtes après est une matrice 2x2, vous voudrez peut-être jeter un coup d'œil aux docs pour EDIT: Ma suggestion n'était pas correcte, mais il semble toujours que l'erreur réside dans la syntaxe, jetez un coup d'œil à Ce p>
Edit2: selon votre commentaire, voici quelques explications. ( TLDR B> en bas) Je ne suis pas trop familier avec Swift, donc je ne peux donc pas vous assurer que tout ce que je dis est correct, mais voilà.
Je viens de supposer que les arguments sont passés à Python dans la façon dont ils sont mis dans l'appel de la méthode. Maintenant, dans Python Maintenant, voyant comment Python ignore considérablement les types de paramètres tant que rien de "illégal" est tenté avec eux, je pensais qu'il était probable que Maintenant, après avoir levé la syntaxe Swift Syntaxe, je dirais que le problème / la solution est que pendant que Swift et Python semblent gérer des listes / des tableaux (Python les appelle les listes) de la même manière, la syntaxe des tuples diffère grandement, ce qui entraîne la méthode de lancer Une erreur lors de l'utilisation d'accolades rondes, créant ainsi un tuple Swift B> que Python ne sait pas comment manipuler, alors que la similitude de la manière dont les tableaux / listes fonctionnent conduit à [] être transmis avec succès à la méthode NUMPY < BR>
Edit3: Ma conclusion ci-dessous semble avoir tort pour la solution voir la réponse de @MarkroXor ci-dessous. Cependant, la différence entre () et [] tient, donc je quitterai le paragraphe tel quel.
P>
X = [A, B, C] CODE> créera un objet de liste de types tandis que x = (a, b, c) code> créera un tuple. Ils sont tous deux utilisés pour stocker plusieurs éléments accessibles via X [Index]. La différence la plus importante entre eux étant, qu'une liste peut être modifiée après sa création ( x [0] = z code>) tout en essayant ceci sur un tuple lancera une erreur. Cependant, cela ne s'applique pas à Swift (contrairement à ce que je pensais au début) b> p>
numpy.zeros () code> ne se soucierait pas s'il est passé liste ou un tuple tant qu'il contient des entiers (testés, aucune erreur). Encore une fois, cela s'applique à l'utilisation dans Python lui-même uniquement p>
TLDR B>
la différence semble être que, tandis que pendant que les matrices de python et de swift sont de la même manière, la mise en œuvre de tuples diffère, de sorte que ce serait la raison en utilisant [] fonctionne sur () del> p> p>
Veuillez lire la question, ce n'est pas un code Python c'est Swift. :)
Merci, comme débutant, je n'ai pas remarqué la différence entre les accolades rondes et carrées à Swift.
Souvent, Python traite des listes et des tuples interchangeables. Parfois, numpy code> utilise la différence pour fournir une fonctionnalité ajoutée. Mais dans np.zeros code> fonctionne. Le mot clé code> code> est également facultatif.
@HPaulj Merci beaucoup pour la clarification! Donc, il semble que mon idée originale soit (au moins partiellement) juste après tout. Je ne pouvais pas le vérifier rapidement car je n'ai pas d'environnement rapide installé rn
L'erreur vous indique que tout ce que vous essayez d'appeler n'est pas une fonction.
Essayez d'utiliser .Call (avec :) code> à la place: P> let x = np.zeros.call(with: 15).shape.call(with: 1, 2)
Cela échoue avec - Erreur fatale: Impossible d'accéder au membre PythonObject 'Call': Fichier /swift/swift/swift/stdlib/Public/python/python.swift, ligne 537 code>
`` `importer python laissez np = python.import (" numpy ") let x = npl.zeros.call (avec: 15) .Pashape.call (avec: 1, 2)` `` `` `
Appliquez la nouvelle ligne selon les besoins ^^. Je ne peux pas l'utiliser dans des commentaires.
D'accord, essayez juste let x = npl.zeros.call (forme: (1, 2)) code>
Veuillez exécuter le code dans votre environnement avant de le suggérer. Cela ne fonctionne pas non plus. Quoi qu'il en soit, merci. S'il vous plaît vérifier la réponse de @nightmared et ses commentaires.
Lorsque le corps de la fermeture a une erreur dedans, le compilateur signalera que celui-ci dans numpy.zeros em> forme strong> est un paramètre qui est un aussi si vous avez besoin d'un "tableau de tableaux", vous pouvez utiliser le Après la syntaxe: p> ceci crée une matrice de 1 x 2 de zéros. p> p> ne peut pas appeler la valeur d'un type non-fonction 'pythonObject' code>. En corrigeant l'erreur de la fermeture, elle compilera.
La syntaxe correcte est - [Notez les supports]. p> rendements p> Swift est rigide avec la syntaxe Contrairement à Python, où les accolades rondes et carrées pourraient être utilisées de manière interchangeable lorsque vous passez à une fonction la plupart du temps.
np.zeros code> ou np.some_function code> prend tableau code> comme argument d'entrée. D'où le besoin de crochets. P> p>
Désolé mais c'est un code swift non python :) Veuillez lire la question. :)
J'ai trouvé cet exemple simple d'utilisation numpy: Gist.github.com/anurlybayev/... Autorise
np.zeros (forme = (1,2)) code>, mais il doit y avoir quelque chose à propos de la syntaxe code> Swift code> qui empêche une telle traduction.@HPaulj Lien de gist brisé.
Vous le trouvez vous-même. Je viens de rechercher sur Swift and Numpy. Rien d'extraordinaire.