मैं एक NumPy सरणी में मानों के आधार पर एक स्ट्रिंग मुद्रित करना चाहता हूं, उदा। मान 0 को अक्षर 'a' तक ले जाना चाहिए।

import numpy as np

arr = np.zeros((2,2))
arr[(0,0)] = 1
arr[(0,1)] = 2
printValues = {0:'a', 1:'b', 2:'c'}
print(np.array2string(arr, formatter={'str':lambda x: printValues[x]}))

अपेक्षित परिणाम:

[['b' 'c']
 ['a' 'a']]

मनाया गया:

[[1. 2.]
 [0. 0.]]
4
HaeschenaufGras 5 जिंदा 2019, 20:22

2 जवाब

सबसे बढ़िया उत्तर

कीवर्ड तर्क formatter के लिए array2string को उस सरणी के तत्वों के प्रकार की आवश्यकता है जिसे आप बदलना चाहते हैं, न कि उस प्रकार की जिसे आप कनवर्ट कर रहे हैं।

तो, आपके उदाहरण में, str के बजाय आपको float का उपयोग करना चाहिए, क्योंकि 0., 1. और 2. फ्लोट हैं।

यदि आप सुनिश्चित करना चाहते हैं कि सरणी का प्रत्येक तत्व निश्चित रूप से आपके फ़ॉर्मेटर के साथ मुद्रित है, तो all का उपयोग करें:

import numpy as np

arr = np.zeros((2, 2))
arr[(0, 0)] = 1
arr[(0, 1)] = 2
printValues = {0: 'a', 1: 'b', 2: 'c'}
print(np.array2string(arr, formatter={'all': lambda x: printValues[int(x)]}))

अधिक उपलब्ध प्रकारों के लिए उपरोक्त लिंक किए गए दस्तावेज़ देखें। हो सकता है float_kind भी आपके लिए एक अच्छा विचार हो।

2
finefoot 19 अप्रैल 2019, 23:30

आईआईयूसी vectorize

np.vectorize(printValues.get)(arr)
array([['b', 'c'],
       ['a', 'a']], dtype='<U1')
2
BENY 5 जिंदा 2019, 20:37