コンソールからユーザーからN * Nの行列を得るために事前に実装された関数はありますか?ユーザ(コンソール)からn * nマトリックスを取得する最良の方法は何ですか?
答えて
ネイティブメソッドはありません。 たとえば、1行につき1行の行列の間に区切り文字を使用して1行を指定できます。このように
matrix = []
DEFAULT_VALUE = 3
DELIMITER = ' '
try:
N = int(input("Enter N:"))
except:
print("Parsing error. Default N = 3")
N = DEFAULT_VALUE
i = 0
while i < N:
row = input("Enter row %d (cell delimiter: '%s'): " % (i + 1, DELIMITER))
try:
parsed_row = list(map(int, row.split(DELIMITER)))
except:
print("Conversion to int error. Please repeat")
continue
if len(parsed_row) != N:
print("Please enter exactly %d numbers" % N)
continue
matrix.append(parsed_row)
i += 1
print("Your matrix:")
print("\n".join(map(lambda x: " ".join(map(lambda y: "%5d" % y, x)), matrix)))
ユーザー(複数可)のPython/numpyの構文を理解している場合、あなたは自分のプログラムが入力として有効なコードを受け入れることができます:それはあるよう
import numpy as np
# Input from user.
# Note that surrounding [] are allowed but not necessary
s = '[1,2], [3,4]'
# Convert input to matrix
matrix = np.array(eval(s))
print(matrix)
このアプローチはかなり堅牢です。たとえば、入力'[(1,2), [3,4]]'
は同じ行列になります。
(今違法なPythonの構文を許可する)、さらに堅牢性を改善するには、行列要素を分離することになりました(以前のように、だけでなく、カンマ)を使用するために、スペースを可能にする
import re, numpy as np
# Input from user
s = '(1 2) (3 4)'
# Convert input to matrix
matrix = np.array(eval(re.sub('\s+', ',', s.strip())))
print(matrix)
を使用することができます。
まあこれに答えるために、複数の方法...
が行列の最初の入力行で意味のn * nのであれば(あなたは、入力ラインの数を知っている(となし、それが入力のために不可能だまああり)キーを押して終了しないでください)。それは、マトリックスの幅と高さが同じであるため、行の残りの部分を(入力と1つの最初の行がすでにから読み込まれる - (1 lenが(ARR [0]))私は範囲を使用
arr = [] arr.append(input().split()) for x in range(len(arr[0]) - 1): arr.append(input().split())
:だから、このようなものが必要入力)。
また、既定のパラメータであるため、パラメータとして ""を付けずに.split()を使用しました。
>>> import math >>> line = ' '.join(map(str, range(4*4))) # Take input from user '0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15' >>> items = map(int, line.split()) # convert str to int [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] >>> n = int(math.sqrt(len(items))) # len(items) should be n**2 4 >>> matrix = [ items[i*n:(i+1)*n] for i in range(n) ] [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]
3.
はこのような何かを試してみてください代わりに、既存のリスト(複数可)を使用して1で行列1を設定し、あなたがこれを使用することができます2.or
# take input from user in one row
nn_matrix = raw_input().split()
total_cells = len(nn_matrix)
# calculate 'n'
row_cells = int(total_cells**0.5)
# calculate rows
matrix = [nn_matrix[i:i+row_cells] for i in xrange(0, total_cells, row_cells)]
例:
>>> nn_matrix = raw_input().split()
1 2 3 4 5 6 7 8 9
>>> total_cells = len(nn_matrix)
>>> row_cells = int(total_cells**0.5)
>>> matrix = [nn_matrix[i:i+row_cells] for i in xrange(0, total_cells, row_cells)]
>>> matrix
[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
numpy内蔵型に最も近いのは、np.matrix
functonです。 MATLABクローンとして、それは、とりわけ、受け入れ、文字列:
In [1550]: np.matrix('1 2;3 4')
Out[1550]:
matrix([[1, 2],
[3, 4]])
結果がmatrix
サブクラスであるので、私はすぐに配列に変換をお勧めします:input
で
In [1551]: np.matrix('1 2;3 4').A
Out[1551]:
array([[1, 2],
[3, 4]])
と結婚:
In [1552]: np.matrix(input('>')).A
>1 2 3; 4 5 6
Out[1552]:
array([[1, 2, 3],
[4, 5, 6]])
これは角形性を強制しません。あなたはそのテストを提供する必要があります。
これは小さなおもちゃの入力には問題ありません。しかし、大きなものについては、ユーザーが手で編集できるファイルから入力を取ることをお勧めします。
np.loadtxt
およびnp.genfromtxt
は、CSV形式のファイルから配列を作成するのに適したツールです。それらを使用することに関する多くの疑問があります。
基本的な配列定義はリストのリストである:作業することができ、ユーザの入力から、このようなリストを構築することができ
alist = [[1,2,3],[4,5,6]]
arr = np.array(alist)
だから、何でも。たとえば、あなたは、文字列DTYPE
In [1560]: np.array(alist)
Out[1560]:
array([['1', '2', '3'],
['4', '5', '6']],
dtype='<U1')
に、このリストの結果から「数字」
In [1558]: alist = ['1 2 3'.split(),'4 5 6'.split()]
In [1559]: alist
Out[1559]: [['1', '2', '3'], ['4', '5', '6']]
作る配列の行を受け入れることができるが、あなたは(intやfloatとして)dtype
を指定することができますし、array
がしようとします文字列を変換します。入力の直後に文字列を数値に変換することもできます。
In [1561]: np.array(alist, dtype=int)
Out[1561]:
array([[1, 2, 3],
[4, 5, 6]])
あなたは[]
も受け入れることができますが、それは対処するより苦痛です。
- 1. コンソール出力から最後のn行を取得する
- 2. mongodbのnからn個のアイテムを取得する方法
- 3. T(n)= 2T(n/2)+ O(n)からO(nlogn)を得る方法
- 4. 何が良いですか:WHERE n = 0またはWHERE n!= 1
- 5. Yiiデータプロバイダからn個のレコードを取得する方法は?
- 6. 配列の最後のN個の項目を取得する最短の方法は何ですか?
- 7. pngからsvgを取得する最も良い方法は何ですか?
- 8. ユーザ入力nからサイズnの配列を作成する
- 9. 配列から最後のn個の要素を取得する方法
- 10. N個のダイナミック入力から値を取得する方法
- 11. ログ(O(n * log(n)))は何ですか?
- 12. キューから最後のn個のアイテムを取得する
- 13. XMPP - チャットルームから最後のn個のメッセージを取得する
- 14. nグラムモデルでnの経験的に見つかった最良の値は何ですか?
- 15. N個の点をn個の区間に入れるのに最も良いアルゴリズムは何ですか
- 16. から取得できる最大値を見つけるN
- 17. fsharpのシーケンスでnからn + xまでの要素を取得する
- 18. std :: mapの最初のn要素を取得する方法
- 19. トップn行を取得する方法
- 20. n個の列間でコンテンツを分割する最も良い方法は何ですか?
- 21. ビット演算n&(n-1)は何をするのですか?
- 22. O(n)とO(log(n))の違い - これはより良く、O(log(n))は正確に何ですか?
- 23. swift firebaseからスナップノードを取得する最良の方法は
- 24. MySQLは作成日からn日間、非アクティブなユーザを取得します
- 25. IreliableDictionaryのキーを取得する最良の方法は何ですか
- 26. sparkデータフレームのカウントを取得する最良の方法は何ですか
- 27. DynamoDB:パーティションキーでフィルタリングされた最後のNレコードから取得
- 28. UILabelのn番目の行からテキストを取得する方法は?
- 29. SASSのカラーリストからn番目の値を取得する方法は?
- 30. Eulers Phi Nを計算する最も簡単な方法は何ですか?
私はそうは思わない。 – gzc
いいえ、あなた自身のロールで 'np.fromstring' – wim