我正在尝试在对其进行更改后使用另一个数组初始化数组。
在python上使用Numpy库函数处理默认的pydataset
import numpy as np
from pydataset import data
iris_data=data('iris')
iris_arr=iris_data.values
sp_l = iris_arr[:,0] #sepal.length
sp_w = iris_arr[:,1] #sepal.width
sp_l = np.array(sp_l)
sp_w = np.array(sp_w)
if(sp_l.any() <= 5 and sp_w.any() <= 3):
sp_le = np.asarray(sp_l)
sp_we = np.asarray(sp_w)
NameError:未定义名称“sp_le”
我期望sp_le被初始化
我认为唯一的问题是条件表达式。您使用的数据可能无法通过该条件。因此,当您使用下面的sp_le时,它不会被初始化。如果你可以给出sp_l和sp_w的值并检查它是否正常。还有hpaulj发布的内容,如果你想告诉sp_l是否有小于5的元素,最好使用(sp_l <= 5)。任何()
我可以从iris
加载sklearn
数据集:
In [317]: from sklearn.datasets import load_iris
In [321]: arr = load_iris().data
In [322]: arr.shape
Out[322]: (150, 4)
结果是2d数组;前5行是:
In [323]: arr[:5,:]
Out[323]:
array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2]])
第一列和第二列是:
In [324]: sp_l = arr[:,0]
In [325]: sp_w = arr[:,1]
In [326]: sp_l.shape
Out[326]: (150,)
sp_l.any()
只是测试是否有任何值不是0.我认为你不想这样。
sp_l<=5
测试sp_l
的值是否小于或等于5
In [327]: (sp_l<=5).any()
Out[327]: True # at least some are
In [328]: (sp_l<=5).sum()
Out[328]: 32 # there are 32 true values in that test
In [329]: (sp_w<=3).sum()
Out[329]: 83 # and 83 sp_w values are small enough.
目前还不清楚你想要什么,但有一种可能性是你想要sp_l
为5或更小且sp_w
为3或更小的行。
In [330]: (sp_l<=5)&(sp_w<=3) # the () and & are important
Out[330]:
array([False, True, False, False, False, False, False, False, True,
False, ... False])
In [331]: ((sp_l<=5)&(sp_w<=3)).sum()
Out[331]: 12
我们用where
得到那些行的索引:
In [332]: idx = np.where(((sp_l<=5)&(sp_w<=3)))
In [333]: idx
Out[333]: (array([ 1, 8, 12, 13, 25, 38, 41, 45, 57, 60, 93, 106]),)
和实际的行:
In [334]: arr[idx[0]]
Out[334]:
array([[4.9, 3. , 1.4, 0.2],
[4.4, 2.9, 1.4, 0.2],
[4.8, 3. , 1.4, 0.1],
[4.3, 3. , 1.1, 0.1],
[5. , 3. , 1.6, 0.2],
[4.4, 3. , 1.3, 0.2],
[4.5, 2.3, 1.3, 0.3],
[4.8, 3. , 1.4, 0.3],
[4.9, 2.4, 3.3, 1. ],
[5. , 2. , 3.5, 1. ],
[5. , 2.3, 3.3, 1. ],
[4.9, 2.5, 4.5, 1.7]])