例如,给定:
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)
这似乎不起作用,我想通过坚持我的实现而不是在开头提到的那个(或使用任何额外的导入,例如计数器)来实现期望的结果.
谢谢.
给定一个2 xd维numpy数组M,我想计算M每列的出现次数.也就是说,我正在寻找一般的版本bincount.
到目前为止我尝试过:(1)将列转换为元组(2)使用散列元组(via hash)到自然数(3)numpy.bincount.
这看起来很笨拙.有人知道更优雅高效的方式吗?
我有一个 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())
谢谢,
我有一个带有shape的3d数组(1000, 12, 30),并且有一个2d数组的shape列表(12, 30),我想要做的是检查3d数组中是否存在这些2d数组。Python中有一种简单的方法可以做到这一点吗?我尝试了关键字,in但是没有用。
我正在尝试实现特定的二分搜索算法。“结果”一开始应该是一个空集,在搜索过程中,结果变量将与我们得到的新结果成为并集。
基本上:
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属性,它保留插入的所有数组的维度,但我无法在没有维度错误的情况下有效地实现它。
如何有效地实现基于向量的集合?因此并集中的点将被视为向量而不是标量,并将保留其向量形式和维度。
我有多个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 中有两列的 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 不会在结果中重复。我将列作为字符串数据类型并有一个非常大的二维数组。一个解决方案可能是,我可以遍历所有行并制作一组。但这会很慢。请提出一种有效的方法来实现它。
我的问题是我的数据不能很好地表示实际情况,因为它有很多重复的行.考虑以下-
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)
有这个功能吗?
我需要计算一组给定范围内的唯一元素的数量.我的输入是这些范围的起点和终点坐标,我执行以下操作.
>>>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行.但我不能给它任何上限.
我目前有一个包含不同概率的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)
提前致谢!