我有一个 3d Numpy 数组,想在考虑其他两个维度的某些元素的情况下取一个轴上的平均值。
这是描述我的问题的示例代码:
import numpy as np
myarray = np.random.random((5,10,30))
yy = [1,2,3,4]
xx = [20,21,22,23,24,25,26,27,28,29]
mymean = [ np.mean(myarray[t,yy,xx]) for t in np.arange(5) ]
Run Code Online (Sandbox Code Playgroud)
然而,这会导致:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Run Code Online (Sandbox Code Playgroud)
为什么像 myarray[:,[1,2,3,4],[1,2,3,4]] 这样的索引可以工作,但我上面的代码却不起作用?
我需要有效地计算给定数组中每个点到另一个数组中每个其他点的欧几里德加权距离。这是我的代码,它按预期工作:x,yx,y
import numpy as np
import random
def rand_data(integ):
'''
Function that generates 'integ' random values between [0.,1.)
'''
rand_dat = [random.random() for _ in range(integ)]
return rand_dat
def weighted_dist(indx, x_coo, y_coo):
'''
Function that calculates *weighted* euclidean distances.
'''
dist_point_list = []
# Iterate through every point in array_2.
for indx2, x_coo2 in enumerate(array_2[0]):
y_coo2 = array_2[1][indx2]
# Weighted distance in x.
x_dist_weight = (x_coo-x_coo2)/w_data[0][indx]
# Weighted distance in y.
y_dist_weight = (y_coo-y_coo2)/w_data[1][indx]
# Weighted …Run Code Online (Sandbox Code Playgroud) 我对 numpy 和科学计算相当陌生,我为一个问题苦苦挣扎了好几天,所以我决定将其发布在这里。
我正在尝试获取 numpy 数组中某个条件的特定出现次数的计数。
In [233]: import numpy as np
In [234]: a= np.random.random([5,5])
In [235]: a >.7
Out[235]: array([[False, True, True, False, False],
[ True, False, False, False, True],
[ True, False, True, True, False],
[False, False, False, False, False],
[False, False, True, False, False]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
我想计算True每行中出现的次数并在该计数达到某个阈值时保留行:
前任 :
results=[]
threshold = 2
for i,row in enumerate(a>.7):
if len([value for value in row if value==True]) > threshold:
results.append(i) # keep ids for each row that …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 python 切片对象来使用该h5py模块访问 HDF5 文件中的数据。我将这个示例放在一起以表明它适用于numpy数组,但不适用于h5py.
import h5py
import numpy as np
slice_obj = [slice(None,3,None), slice(2,5,None)]
test_array = np.ones((3,5))
print test_array[0:3,2:5]
print test_array[slice_obj]
f = h5py.File("testing.hdf5","w")
f['data'] = test_array
f.close()
f = h5py.File("testing.hdf5","r")
test2 = f['data'][0:3,2:5]
print test2
test2 = f['data'][slice_obj]
print test2
f.close()
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 1. 1. 1.]
[ 1. …Run Code Online (Sandbox Code Playgroud) tl;dr 答案:不要使用 numpy。使用csv.writer而不是numpy.savetxt.
我是 Python 和 NumPy 的新手。似乎将二维字符串数组(包含逗号)保存到 CSV 文件应该不那么困难,但我无法让它按照我想要的方式工作。
假设我有一个如下所示的数组(由列表列表组成):
[['text1, text2', 'text3'],
['text4', 'text5']]
Run Code Online (Sandbox Code Playgroud)
我想要一个在 Excel 中如下所示(或不带引号字符)的 CSV 文件(管道 = 单元格分隔符):
'text1, text2' | 'text3'
'text4' | 'text5'
Run Code Online (Sandbox Code Playgroud)
我正在使用numpy.savetxt(filename, array, fmt="%s"),并得到以下 CSV 输出(带方括号):
['text1, text2','text3']
['text4','text5']
Run Code Online (Sandbox Code Playgroud)
在 Excel 中显示如下:
['text1 | text2' | 'text3']
['text4' | 'text5']
Run Code Online (Sandbox Code Playgroud)
我尝试使用 savetxt 分隔符参数,但输出没有变化。
我需要手动执行此操作吗?如果是这样,请告诉我是否有任何我应该注意的捷径。
最终,我需要将 CSV 导入 Postgresql 数据库。我并不完全清楚 CSV 格式需要什么才能按预期工作,但我假设如果它在 Excel 中看起来错误,它最终可能会在 Postgres 中变得混乱。Postgres 文档说:
每个记录中的值由 DELIMITER 字符分隔。如果该值包含分隔符、QUOTE 字符、NULL 字符串、回车符或换行符,则整个值将以 QUOTE 字符为前缀和后缀,并且在 …
我不知道如何显示 numpy.datetime64 的单位。说:
t=np.datetime64(123456789, 'ms' )
有什么方法告诉我单位是“ms”?
我在 Windows 上使用 python 2.7、numpy 1.6.1、32 位。我正在编写一个函数,将一些数据打包到 32 位整数中,并根据常量值生成 C 源声明。在这样做的过程中,我发现 numpy 的 uint8 类型有一些奇怪的行为。
我敢肯定,看到这一点,没有人会感到惊讶:
>>> n = 0x94 << 24
>>> n
2483027968L
>>> hex(n)
'0x94000000L'
Run Code Online (Sandbox Code Playgroud)
但是对 numpy uint8 做同样的事情,你会得到令我惊讶的东西:
>>> n = np.uint8(0x94) << 24
>>> n
-1811939328
>>> hex(n)
'-0x6c000000'
Run Code Online (Sandbox Code Playgroud)
人们可能会认为显式无符号类型返回负值的可能性更小。
请注意,符号位清除的值按预期工作:
>>> n = np.uint8(0x74) << 24
>>> n; hex(n)
1946157056
'0x74000000'
Run Code Online (Sandbox Code Playgroud)
我碰巧注意到 numpy 似乎正在将无符号类型提升为有符号类型:
>>> n = np.uint8(0x74) << 24
>>> type(n)
<type 'numpy.int32'>
Run Code Online (Sandbox Code Playgroud)
这似乎是一个明显的错误。我找不到任何关于此类已知错误的参考,但是......是吗?
我正在使用 numpy 和 scipy 开发一个项目,我需要填写 nanvalues。目前我使用 scipy.interpolate.rbf,但它一直导致 python 崩溃,所以严重的 try/ except 甚至无法保存它。然而,运行几次后,如果中间有数据被所有nan包围,就像一座孤岛,它似乎可能会不断失败。有没有更好的解决方案,不会一直崩溃?
顺便说一句,这是我需要推断的大量数据。有时多达图像的一半(70x70,灰度),但它不需要是完美的。它是图像拼接程序的一部分,因此只要它与实际数据相似,它就可以工作。我尝试过用最近邻来填写nan,但结果相差太大。
编辑:
它似乎总是失败的形象。隔离此图像允许它在崩溃之前传递一次图像。

我至少使用版本 NumPy 1.8.0 和 SciPy 0.13.2。
我必须使用 Excel 的 LINEST 函数来计算线性回归中的误差。我希望使用 Numpy 的 polyfit 函数重现结果。我希望重现以下 LINEST 用法:
LINEST(y's, x's,,TRUE)
与polyfit。我不确定如何让这两个函数产生相同的值,因为我尝试过的都没有给出类似的结果。
我尝试了以下方法:
numpy.polyfit(x,y,3)
以及第三个位置的各种其他值。
当我想打印一个 2D 数组(正方形形状)以在 python 面板中查看它时,数组的格式看起来很奇怪。看来 19 个元素无法形成正方形,因此将最后一个元素放在下一行。当我尝试使用 18 个元素时,效果很好。我不确定这是一个 numpy 问题还是我的平台(我使用 Enthought Canopy)。当我打印出来时,我可以做些什么来将所有 19 个元素放在一行中吗?
import numpy
a = numpy.zeros(361)
b = a.reshape(19,19)
print b
Run Code Online (Sandbox Code Playgroud)
输出:
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. …Run Code Online (Sandbox Code Playgroud) numpy ×10
python ×10
arrays ×3
csv ×1
datetime ×1
datetime64 ×1
excel ×1
h5py ×1
performance ×1
postgresql ×1
scipy ×1
slice ×1