さて、これは興味深いですあなたの例を実行すると私にこれを与えます:
>>> numpy.asarray([['abc', 117858348, 117858388, 'def']])
array([['abc', '117', '117', 'def']],
dtype='|S3')
変換がどのように機能するかを知りたいと思いました。
>>> help(numpy.asarray)
asarray(a, dtype=None, order=None)
Convert the input to an array.
Parameters
----------
a : array_like
Input data, in any form that can be converted to an array. This
includes lists, lists of tuples, tuples, tuples of tuples, tuples
of lists and ndarrays.
dtype : data-type, optional
By default, the data-type is inferred from the input data.
基になるタイプはinferred from the input data
、それが何を意味するのか疑問に思うので、
>>> import inspect
>>> print inspect.getsource(numpy.asarray)
取得しますreturn array(a, dtype, copy=False, order=order)
が、numpy.array
組み込まれているため、 http: //docs.scipy.org/doc/numpy/reference/generated/numpy.array.htmlのドキュメントを確認すると次のようになります。
dtype:データ型、オプション
配列に必要なデータ型。指定しない場合、タイプは、シーケンス内のオブジェクトを保持するために必要な最小タイプとして決定されます。この引数は、配列を「アップキャスト」するためにのみ使用できます。ダウンキャストには、.astype(t)メソッドを使用します。
可能な限りアップキャストされているように見えるので、私の場合は長さ3の文字列にアップキャストされます。これは、シーケンス内で最も長い文字列であるため、より長い文字列を導入すると、それにアップキャストされるようです。他のタイプの桁の長さが適切に考慮されていない場合、これはバグである可能性があります、私にはわかりません...
長い文字列シーケンスを指定するだけで済みます
>>> numpy.asarray([['abc', 117858348, 117858388, 'defs']], dtype = 'S20')
array([['abc', '117858348', '117858388', 'defs']],
dtype='|S20')
20文字で十分なようですが、より多くのメモリを消費する可能性があるため、最大値に設定するだけです...
ストアの値を同種の型として伝えることができる限りnumpy
、配列を作成するときにすべてが事前に決定された型でなければならないのはこのためです。
>>> numpy.__version__
'1.6.1'
$ python --version
Python 2.6.1
$ uname -a
Darwin 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
これがお役に立てば幸いです。