我想在我的记录数组中使用numpy.where:
tinyMCE.get('content').getContent()
我试过这个:
[plugin]---GET THIS CODE----[/plugin]
什么也没有回复,所以我尝试了这个:
new_array = np.core.records.fromrecords([(data[0],data[1],data[2],data[3],data[4],data[5],NDate)],names='Date, Name, Age, Start, End,Avg,NDate',formats='S10,d,d,d,d,d,d')
返回相等元素的数量。但我只需要第一次出现的指数。怎么办呢?
答案 0 :(得分:0)
从你的第一个陈述我可以构建一个类似于数组的数组
new_array = np.core.records.fromrecords([(1,2,3,4,5,6,7)],
names='Date, Name, Age, Start, End,Avg,NDate',
formats='S10,d,d,d,d,d,d')
显示为
rec.array([('1', 2.0, 3.0, 4.0, 5.0, 6.0, 7.0)],
dtype=[('Date', 'S10'), ('Name', '<f8'), ('Age', '<f8'),
('Start', '<f8'), ('End', '<f8'), ('Avg', '<f8'), ('NDate', '<f8')])
但你的
np.where(work.stock == 6.26)
让我挠头。什么是work
? stock
是另一个数组的字段。它不是new_array
的字段。
np.where(work.stock == work.stock [6.26])
同样令人费解。如何使用float(6.26)索引数组?
小心做work.stock==6.26
之类的测试。由于舍入误差,浮点数的平等测试通常不起作用。
在简单数组上使用np.where
练习。在尝试浮动之前从整数开始。了解当没有任何匹配时,以及有多个匹配时产生的内容。
如果new_array
中只有一条记录,那么使用简单的Python列表可能会更好。
以下是使用where
查找指定字段中给定值的第一条记录的方法
定义一个包含2个字段,4个记录和整数值的小数组(为了便于测试):
In [482]: X=np.core.records.fromrecords([(1,2),(2,3),(3,3),(4,1),(1,2)],dtype='i,i')
In [483]: X
Out[483]:
rec.array([(1, 2), (2, 3), (3, 3), (4, 1), (1, 2)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
In [484]: X['f0']
Out[484]: array([1, 2, 3, 4, 1])
X['f0']
的元素等于1
(整数)
In [486]: i=np.where(X['f0']==1)
In [487]: i
Out[487]: (array([0, 4]),)
第一个索引(第一个[0]从元组中选出数组)
In [488]: i[0][0]
Out[488]: 0
In [489]: X[i[0][0]]
Out[489]: (1, 2)
或者,我可以使用整个i
来获取符合此条件的所有X
In [494]: X[i]
Out[494]:
rec.array([(1, 2), (1, 2)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
并选择第一个:
In [495]: X[i][0]
Out[495]: (1, 2)
如果没有任何匹配,则where
返回一个空数组
In [496]: i=np.where(X['f0']==5)
In [497]: X[i]
Out[497]:
rec.array([],
dtype=[('f0', '<i4'), ('f1', '<i4')])
结构化数组字段上的where
测试与2d数组的行或列上的测试没有什么不同。
我将X.f0
更改为X['f0']
,因为记录数组表示法可能令人困惑,而非记录结构化数组现在更常见,尤其是当数组由np.getfromtxt
生成时。 / p>
X==2
返回False
。 X['f0']==2
返回array([False, True, False, False, False], dtype=bool)
。布尔测试不适用于结构化数组的字段。
要在所有字段中查找X
的'行',我必须针对匹配的结构化数组进行测试,例如
In [507]: X==np.array([(2,3)],dtype=X.dtype)
Out[507]: rec.array([False, True, False, False, False], dtype=bool)
np.where
可以使用Out[507]
布尔数组。
查找X
条记录,其中一个字段或另一个字段具有2
:
In [518]: I=(X['f0']==2) | (X['f1']==2)
In [519]: I
Out[519]: array([ True, True, False, False, True], dtype=bool)
In [520]: X[I]
Out[520]:
rec.array([(1, 2), (2, 3), (1, 2)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
我必须单独测试每个字段。
在这种情况下,X
的所有字段都是整数,因此我可以构造一个2d整数视图,并对其执行测试:
In [526]: np.any(X.view(int).reshape(X.shape[0],-1)==2,axis=1)
Out[526]: array([ True, True, False, False, True], dtype=bool)
有关使用view
结构化数组的详情,请参阅最近的https://stackoverflow.com/a/33094425/901925。