2024-04-24 15:56:18 发布
网友
我只想创建一个大小为(N,m)的numpy数组,其中第一列由integer组成,其余列默认为float。 因此,如果初始化为零,则应为结果:
array([[ 0, 0., 0., 0., 0.], [ 0, 0., 0., 0., 0.], [ 0, 0., 0., 0., 0.], [ 0, 0., 0., 0., 0.], [ 0, 0., 0., 0., 0.]])
在尝试创建这样一个结构化数组时,我所做的所有尝试都会返回一些元组子元素。
可以将数组与dtype = object一起使用:
dtype = object
>>> arr = np.ndarray((10,4),dtype = object) >>> arr[:,0] = int(10) >>> arr[:,1:] = float(10) >>> arr array([[10, 10.0, 10.0, 10.0], [10, 10.0, 10.0, 10.0], [10, 10.0, 10.0, 10.0], [10, 10.0, 10.0, 10.0], [10, 10.0, 10.0, 10.0], [10, 10.0, 10.0, 10.0], [10, 10.0, 10.0, 10.0], [10, 10.0, 10.0, 10.0], [10, 10.0, 10.0, 10.0], [10, 10.0, 10.0, 10.0]], dtype=object)
注意在做算术时你得到了正确的行为。
>>> arr / 3 array([[3, 3.33333333333, 3.33333333333, 3.33333333333], [3, 3.33333333333, 3.33333333333, 3.33333333333], [3, 3.33333333333, 3.33333333333, 3.33333333333], [3, 3.33333333333, 3.33333333333, 3.33333333333], [3, 3.33333333333, 3.33333333333, 3.33333333333], [3, 3.33333333333, 3.33333333333, 3.33333333333], [3, 3.33333333333, 3.33333333333, 3.33333333333], [3, 3.33333333333, 3.33333333333, 3.33333333333], [3, 3.33333333333, 3.33333333333, 3.33333333333], [3, 3.33333333333, 3.33333333333, 3.33333333333]], dtype=object)
或者可以使用^{}:
>>> import numpy as np >>> arr = np.recarray(10,dtype=[('x',int),('y',float,4)]) >>> arr[:] = 0 >>> arr rec.array([(0, array([ 0., 0., 0., 0.])), (0, array([ 0., 0., 0., 0.])), (0, array([ 0., 0., 0., 0.])), (0, array([ 0., 0., 0., 0.])), (0, array([ 0., 0., 0., 0.])), (0, array([ 0., 0., 0., 0.])), (0, array([ 0., 0., 0., 0.])), (0, array([ 0., 0., 0., 0.])), (0, array([ 0., 0., 0., 0.])), (0, array([ 0., 0., 0., 0.]))], dtype=[('x', '<i4'), ('y', '<f8', (4,))]) >>> arr['x'] array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) >>> arr['y'] array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]])
如果需要对所有值进行算术运算,则必须分别对每个字段执行运算,例如
>>> arr['x'] += 2 >>> arr['y'] += 2
虽然我能想到很多理由,为什么你一开始就不想这么做,但这不是由我来判断的,我讨厌别人试图贬低我自己快速而肮脏的黑客行为的价值。
其基本原理是使用dtype=object。由于Python中的所有内容都是一个对象,因此可以混合数字类型,同时仍然保持数组中的同质性。我建议如下,但你显然可以适应自己的需要:
dtype=object
import numpy rows = 5 a = numpy.zeros((rows,5)).astype(object) a[:,0] = a[:,0].astype(int) print a [[0 0.0 0.0 0.0 0.0] [0 0.0 0.0 0.0 0.0] [0 0.0 0.0 0.0 0.0] [0 0.0 0.0 0.0 0.0] [0 0.0 0.0 0.0 0.0]]
请阅读numpy文档中的内容,该文档指出所有成员必须属于同一类型
NumPy's main object is the homogeneous multidimensional array. It is a table of elements (usually numbers), all of the same type, indexed by a tuple of positive integers.
可以将数组与
dtype = object
一起使用:注意在做算术时你得到了正确的行为。
或者可以使用^{} :
如果需要对所有值进行算术运算,则必须分别对每个字段执行运算,例如
虽然我能想到很多理由,为什么你一开始就不想这么做,但这不是由我来判断的,我讨厌别人试图贬低我自己快速而肮脏的黑客行为的价值。
其基本原理是使用
dtype=object
。由于Python中的所有内容都是一个对象,因此可以混合数字类型,同时仍然保持数组中的同质性。我建议如下,但你显然可以适应自己的需要:请阅读numpy文档中的内容,该文档指出所有成员必须属于同一类型
相关问题 更多 >
编程相关推荐