我有一个2d numpy数组my_array
,它的开头是这样的:
array([[1., 2., 3., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 6., 7., 8., 9.]])
但经过一些无关紧要的处理后,现在看起来像这样:
array([[1., 2., 0., 4., 5., 6., 0., 8., 9.],
[0., 2., 0., 0., 5., 6., 7., 8., 9.],
[0., 2., 0., 4., 5., 0., 7., 0., 9.],
[1., 2., 0., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 0., 7., 8., 9.],
[0., 2., 0., 4., 5., 6., 0., 8., 9.],
[1., 2., 0., 4., 5., 6., 7., 8., 9.],
[1., 2., 0., 4., 5., 6., 7., 8., 9.],
[1., 2., 0., 4., 5., 6., 7., 8., 0.]])
正如您所看到的,有些项目已经被淘汰了#34;相当随机,但只留下3的值,只有1个项目不为零。我正在寻找一个获取此数组的函数,并返回值为3
的索引/行号(或者只在数组中出现一次且仅出现一次的任何其他值)。
以不同的方式解释:
我首先要弄清楚是否有这样的项目只出现一次(在这个例子中答案是肯定的,那个项目是数字3
),然后我需要返回它的行号(在这种情况下4
,因为3
中唯一包含my_array[4]
的行是:0
)
我已经成功完成了迭代数组,逐项,并计算每个数字出现的次数(并仅返回计数为1的项目),然后再次迭代所有数据以找到正确的数字该项目所在的索引/行号。
这似乎非常低效,特别是如果阵列会更大。 numpy有更好的方法吗?
编辑:如果只出现一次的<?PHP
$url="http://tgftp.nws.noaa.gov/data/observations/metar/stations/KJFK.TXT";
$info=file_get_contents($url);
$url_info = "http://username:password@icecast:8000/admin/metadata?mount=/mymount&mode=updinfo&song=" . urlencode($info);
// create a new cURL resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $url_info);
curl_setopt($ch, CURLOPT_HEADER, 0);
// grab URL and pass it to the browser
curl_exec($ch);
// close cURL resource, and free up system resources
curl_close($ch);
?>
数不应该计算,我只会查找&#34;列&#34;完全归零,除了其中的1个项目
答案 0 :(得分:3)
答案 1 :(得分:2)
编辑我甚至不使用面具,你可以使用第一行和最后一行:
x = np.array([[1., 2., 0., 4., 5., 6., 0., 8., 9.],
[0., 2., 0., 0., 5., 6., 7., 8., 9.],
[0., 2., 0., 4., 5., 0., 7., 0., 9.],
[1., 2., 0., 4., 5., 6., 7., 8., 9.],
[1., 2., 3., 4., 5., 0., 7., 8., 9.],
[0., 2., 0., 4., 5., 6., 0., 8., 9.],
[1., 2., 0., 4., 5., 6., 7., 8., 9.],
[1., 2., 0., 4., 5., 6., 7., 8., 9.],
[1., 2., 0., 4., 5., 6., 7., 8., 0.]])
res = (x == 3)
print(np.where(res * x)[0])
输出:
[4]
对np.where()
的完整回复是:
(array([4], dtype=int64), array([2], dtype=int64))
因此,如果你想要列和行号,你可以同时使用这两个。