之前在比较bsxfun
和repmat
表现之间提出的问题很少.
Matlab - bsxfun no longer faster than repmat?
.这个尝试研究repmat
和之间的性能比较bsxfun
,特别是从输入数组本身的列中执行减去输入数组的平均值,因此只会探索与其等价物相对的@minus
部分.bsxfun
repmat
In Matlab, when is it optimal to use bsxfun?
.那个试图通过沿列的平均值进行相同的减法操作,也没有扩展到其他内置操作.在这篇文章中,我试图调查两者之间的性能数据bsxfun
并repmat
覆盖所有bsxfun
内置函数,从而为它提供更广泛的视角,因为这两者都提供了良好的矢量化解决方案.
具体来说,我对这篇文章的问题是:
各种内置操作如何bsxfun
对repmat
等效执行?bsxfun
支持浮点运算一样@plus
,@minus
,@times
等,并且还像关系和逻辑运算@ge
,@and
等等.所以,是否有特定的内置插件,会给我明显的加速与bsxfun
比使用他们的repmat
等价物?
罗兰在她blog post
已经基准repmat
对bsxfun
具有定时@() A - repmat(mean(A),size(A,1),1)
对@() bsxfun(@minus,A,mean(A))
分别.如果我需要涵盖所有内置函数的基准测试,我可以使用一些其他可用于浮点,关系和逻辑运算的比较模型吗?
我有一个相对稀疏的数组,我想遍历每一行并只调整非零元素.
示例输入:
[2,3,1,0]
[0,0,2,1]
Run Code Online (Sandbox Code Playgroud)
示例输出:
[2,1,3,0]
[0,0,1,2]
Run Code Online (Sandbox Code Playgroud)
注意零如何改变位置.
要对每行中的所有元素(包括零)进行洗牌,我可以这样做:
for i in range(len(X)):
np.random.shuffle(X[i, :])
Run Code Online (Sandbox Code Playgroud)
我试图做的是这样的:
for i in range(len(X)):
np.random.shuffle(X[i, np.nonzero(X[i, :])])
Run Code Online (Sandbox Code Playgroud)
但它没有效果.我注意到返回类型与X[i, np.nonzero(X[i, :])]
原因不同X[i, :]
.
In[30]: X[i, np.nonzero(X[i, :])]
Out[30]: array([[23, 5, 29, 11, 17]])
In[31]: X[i, :]
Out[31]: array([23, 5, 29, 11, 17])
Run Code Online (Sandbox Code Playgroud) 我经历了RuntimeWarning
RuntimeWarning: invalid value encountered in less_equal
Run Code Online (Sandbox Code Playgroud)
由我的这行代码生成:
center_dists[j] <= center_dists[i]
Run Code Online (Sandbox Code Playgroud)
两个center_dists[j]
和center_dists[i]
是numpy的阵列
这个警告可能是什么原因?
问题设置简介
我在做一些涉及基准- ~A
和A==0
一double array with no NaNs
,两者都转换A
为逻辑阵列,所有zeros
被转换为true
值和休息被设置为false
值.
对于基准测试,我使用了三组输入数据 -
15:5:100
50:40:1000
200:400:3800
输入是使用A = round(rand(N)*20)
,其中N是从size数组中获取的参数.因此,N
会从变化15 to 100 with stepsize of 5
为所述第一组和类似地对于第二和第三组.请注意,我将datasize定义为N,因此元素的数量将是datasize ^ 2或N ^ 2.
基准代码
N_arr = 15:5:100; %// for very small to small sized input array
N_arr = 50:40:1000; %// for small to medium sized input array
N_arr = 200:400:3800; %// for medium …
Run Code Online (Sandbox Code Playgroud) 假设我有一个宽x和高y的numpy图像.我必须将图像的中心部分裁剪为宽度cropx和height cropy.让我们假设cropx和cropy是正非零整数并且小于相应的图像大小.将切片应用于输出图像的最佳方法是什么?
我有两个numpy数组,A和B.一个包含唯一值,B是A的子数组.现在我正在寻找一种方法来获得B中B值的索引.
例如:
A = np.array([1,2,3,4,5,6,7,8,9,10])
B = np.array([1,7,10])
# I need a function fun() that:
fun(A,B)
>> 0,6,9
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用'values'数组和'counter'数组将多个值插入到数组中.例如,如果:
a=[1,3,2,5]
b=[2,2,1,3]
Run Code Online (Sandbox Code Playgroud)
我想要一些功能的输出
c=somefunction(a,b)
Run Code Online (Sandbox Code Playgroud)
成为
c=[1,1,3,3,2,5,5,5]
Run Code Online (Sandbox Code Playgroud)
其中a(1)重复b(1)次,a(2)重复b(2)次等等...
MATLAB中是否有内置函数来执行此操作?如果可能的话,我想避免使用for循环.我尝试过'repmat()'和'kron()'的变体无济于事.
这基本上是Run-length encoding
.
Numpy有一些非常有用的字符串操作,它们可以对通常的Python字符串操作进行矢量化.
与这些操作相比pandas.str
,numpy strings模块似乎缺少一个非常重要的模块:能够切割数组中的每个字符串.例如,
a = numpy.array(['hello', 'how', 'are', 'you'])
numpy.char.sliceStr(a, slice(1, 3))
>>> numpy.array(['el', 'ow', 're' 'ou'])
Run Code Online (Sandbox Code Playgroud)
我是否错过了具有此功能的模块中的一些明显方法?否则,有一种快速的矢量化方式来实现这一目标吗?
现在有很多类似的问题,但大多数都回答了如何删除重复的列.但是,我想知道如何创建元组列表,其中每个元组包含重复列的列名.我假设每列都有一个唯一的名称.只是为了进一步说明我的问题:
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],'B': [2, 4, 2, 1, 9],
'C': [1, 2, 3, 4, 5],'D': [2, 4, 2, 1, 9],
'E': [3, 4, 2, 1, 2],'F': [1, 1, 1, 1, 1]},
index = ['a1', 'a2', 'a3', 'a4', 'a5'])
Run Code Online (Sandbox Code Playgroud)
然后我想要输出:
[('A', 'C'), ('B', 'D')]
Run Code Online (Sandbox Code Playgroud)
如果你今天感觉很棒,那么也可以将相同的问题扩展到行.如何获取每个元组包含重复行的元组列表.
我有一个矩阵(准确地说是2d numpy ndarray):
A = np.array([[4, 0, 0],
[1, 2, 3],
[0, 0, 5]])
Run Code Online (Sandbox Code Playgroud)
我想A
根据另一个数组中的滚动值独立滚动每一行:
r = np.array([2, 0, -1])
Run Code Online (Sandbox Code Playgroud)
也就是说,我想这样做:
print np.array([np.roll(row, x) for row,x in zip(A, r)])
[[0 0 4]
[1 2 3]
[0 5 0]]
Run Code Online (Sandbox Code Playgroud)
有没有办法有效地做到这一点?也许使用花哨的索引技巧?