相关疑难解决方法(0)

Python:计算数组中相同的行(没有任何导入)

例如,给定:

import numpy as np
data = np.array(
    [[0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 0, 1],
    [0, 1, 1],
    [0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)

我想得到一个三维数组,看起来像:

result = array([[[ 2.,  0.],
                 [ 0.,  2.]],

                [[ 0.,  2.],
                 [ 0.,  0.]]])
Run Code Online (Sandbox Code Playgroud)

一种方法是:

for row in data
    newArray[ row[0] ][ row[1] ][ row[2] ] += 1
Run Code Online (Sandbox Code Playgroud)

我想要做的是以下内容:

for i in dimension1
   for j in dimension2
      for k in dimension3
          result[i,j,k] = (data[data[data[:,0]==i, 1]==j, 2]==k).sum()
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,我想通过坚持我的实现而不是在开头提到的那个(或使用任何额外的导入,例如计数器)来实现期望的结果.

谢谢.

python arrays numpy list

5
推荐指数
1
解决办法
160
查看次数

计算numpy数组中列的出现次数

给定一个2 xd维numpy数组M,我想计算M每列的出现次数.也就是说,我正在寻找一般的版本bincount.

到目前为止我尝试过:(1)将列转换为元组(2)使用散列元组(via hash)到自然数(3)numpy.bincount.

这看起来很笨拙.有人知道更优雅高效的方式吗?

python numpy

5
推荐指数
2
解决办法
1817
查看次数

检查 numpy 数组列表是否相等

我有一个 numpy 数组列表,想要检查所有数组是否相等。做到这一点最快的方法是什么?

我知道 numpy.array_equal 函数(https://docs.scipy.org/doc/numpy-1.10.0/reference/ generated/numpy.array_equal.html),但据我所知,这仅适用于两个数组,我想相互检查 N 个数组。

我还找到了这个答案来测试列表中的所有元素:检查列表中的所有元素是否相同。但是,当我尝试接受的答案中的每种方法时,我得到一个异常(ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all())

谢谢,

python arrays numpy

5
推荐指数
1
解决办法
3112
查看次数

检查Python中的3d数组中是否存在2d数组?

我有一个带有shape的3d数组(1000, 12, 30),并且有一个2d数组的shape列表(12, 30),我想要做的是检查3d数组中是否存在这些2d数组。Python中有一种简单的方法可以做到这一点吗?我尝试了关键字,in但是没有用。

python numpy python-3.x pandas

5
推荐指数
1
解决办法
518
查看次数

在 Numpy 中获得向量集并集的有效方法

我正在尝试实现特定的二分搜索算法。“结果”一开始应该是一个空集,在搜索过程中,结果变量将与我们得到的新结果成为并集。

基本上:

results = set()
for result in search():
  results = results.union(result)
Run Code Online (Sandbox Code Playgroud)

但这样的代码实际上不能与 Numpy 数组一起使用,因此我们np.union1d为此目的使用:

results = np.array([])
for result in search():
    result = np.union1d(results, result)
Run Code Online (Sandbox Code Playgroud)

上面的代码也不起作用,因为如果我们有两个向量a = [1,2,3]b=[3,4,5]np.union1d(a, b)将返回:

[1, 2, 3, 4, 5]

但我希望它返回:

[[1, 2, 3], [3,4,5]]

由于没有重复的向量,如果我们有例如union([[1, 2, 3], [3,4,5]], [1,2,3]),返回值应保持不变:

[[1, 2, 3], [3,4,5]]


所以我想说我需要一个基于 numpy 数组的 union

我还考虑过使用np.append(a, b)and then np.unique(x),但这两个函数都将低维数组投影到高维数组。np.append还有axis=0属性,它保留插入的所有数组的维度,但我无法在没有维度错误的情况下有效地实现它。

问题:

如何有效地实现基于向量的集合?因此并集中的点将被视为向量而不是标量,并将保留其向量形式和维度。

python arrays numpy

5
推荐指数
1
解决办法
5922
查看次数

检测多个numpy 2-d数组中的第一个唯一行

我有多个numpy 2-d数组,我想比较行.我的函数的输出应该是一个numpy二维数组,表示三个输入数组的所有行.我希望能够检测到第一次出现行,每秒或第三个重复行应该在输出中标记为False.单个数组中不可能有重复的行.

如果有可能我想避免使用循环,因为它们会降低计算速度.

例:

array1 = array([[444, 427],
   [444, 428],
   [444, 429],
   [444, 430],
   [445, 421]], dtype=uint64)

array2 = array([[446, 427],
   [446, 440],
   [444, 429],
   [444, 432],
   [445, 421]], dtype=uint64)

array3 = array([[447, 427],
   [446, 441],
   [444, 429],
   [444, 432],
   [445, 421]], dtype=uint64)

# output
array([[True, True, True, True,  True],
   [ True,  True,  False, True,  False],
   [ True,  True,  False, False,  False]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python arrays numpy scipy

4
推荐指数
1
解决办法
192
查看次数

根据 2 列值取 numpy 数组的唯一值。

我在 python 中有两列的 Numpy 数组,如下所示:

time,id
1,a
2,b
3,a
1,a
5,c
6,b
3,a
Run Code Online (Sandbox Code Playgroud)

我想占用每个用户的独特时间。对于上述数据,我想要低于输出。

time,id
1,a
2,b
3,a
5,c
6,b
Run Code Online (Sandbox Code Playgroud)

也就是说,我只想取唯一的行。所以, 1,a 和 3,a 不会在结果中重复。我将列作为字符串数据类型并有一个非常大的二维数组。一个解决方案可能是,我可以遍历所有行并制作一组。但这会很慢。请提出一种有效的方法来实现它。

python arrays numpy

2
推荐指数
1
解决办法
3792
查看次数

有没有一种简单的方法可以消除Python-pandas中DataFrame中的重复行?

我的问题是我的数据不能很好地表示实际情况,因为它有很多重复的行.考虑以下-

    a    b
1  23   42
2  23   42
3  23   42
4  14   12
5  14   12
Run Code Online (Sandbox Code Playgroud)

我只想要1行并消除所有重复.它完成后应该如下所示.

    a    b
1  23   42
2  14   12
Run Code Online (Sandbox Code Playgroud)

有这个功能吗?

python dataframe pandas

2
推荐指数
1
解决办法
165
查看次数

计算范围内唯一元素数量的有效方法?

我需要计算一组给定范围内的唯一元素的数量.我的输入是这些范围的起点和终点坐标,我执行以下操作.

>>>coordinates
 [[7960383, 7961255],
 [15688414, 15689284],
 [19247797, 19248148],
 [21786109, 21813057],
 [21822367, 21840682],
 [21815951, 21822369],
 [21776839, 21783355],
 [21779693, 21786111],
 [21813097, 21815959],
 [21776839, 21786111],
 [21813097, 21819613],
 [21813097, 21822369]]
 [21813097, 21822369]]
>>>len(set(chain(*[range(i[0],i[1]+1) for i in coordinates])))   #here chain is from itertools
Run Code Online (Sandbox Code Playgroud)

问题是它不够快.这需要在我的机器上花费3.5ms(使用%timeit)(购买新计算机不是一种选择),因为我需要在数百万套上执行此操作,所以速度并不快.

有什么建议可以证明这一点吗?

编辑:行数可以变化.在这种情况下,有12行.但我不能给它任何上限.

python performance numpy range set

2
推荐指数
1
解决办法
90
查看次数

如何在列表中不插入相同的值组合?

我目前有一个包含不同概率的6x3矩阵.

在这种情况下,我的行有3个值,对应于我的样本最终属于某个类的概率.

我想要做的是为我的6个样本获得3个不同类别中的每一个.我担心我最终可能会重复一遍.

我注意到每个元素都lista包含6个值.有没有一种简单的方法可以摆脱可能的重复?

for combination in itertools.product(*probability):
    q1 = np.prod((combination))
    lista.append(q1)
    print(combination)
    i = i+1
print(i)
print(np.sum(lista))
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python python-3.x

1
推荐指数
1
解决办法
69
查看次数

标签 统计

python ×10

numpy ×8

arrays ×5

pandas ×2

python-3.x ×2

dataframe ×1

list ×1

performance ×1

range ×1

scipy ×1

set ×1