- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在教自己一些关于 numpy
的知识,我已经整理了一些旧的本科教材以用作示例。因此,我编写了一个 without numpy
函数来计算悬臂梁在任意点的单点载荷引起的挠度。非常简单,除了偏转方程会根据您在点力的哪一侧而变化,所以我将梁分成两个范围,计算范围内每个间隔的偏转值并将结果附加到列表中。这是代码。
def deflection(l, P, a, E, I):
"""
Calculate the deflection of a cantilever beam due to a simple point load.
Calculates the deflection at equal one inch intervals along the beam and
returns the deflection as a list along with the the length range.
Parameters
----------
l : float
beam length (in)
P : float
Point Force (lbs)
a : float
distance from fixed end to force (in)
E : float
modulus of elasticity (psi)
I : float
moment of inertia (in**4)
Returns
-------
list
x : distance along beam (in)
list of floats
y : deflection of beam (in)
Raises
------
ValueError
If a < 0 or a > l (denoting force location is off the beam)
"""
if (a < 0) or (a > l):
raise ValueError('force location is off beam')
x1 = range(0, a)
x2 = range(a, l + 1)
deflects = []
for x in x1:
y = (3 * a - x) * (P * x**2) / (6 * E * I)
deflects.append(y)
for x in x2:
y = (3 * x - a) * (P * a**2) / (6 * E * I)
deflects.append(y)
return list(x1) + list(x2), deflects
现在我想用 numpy 做同样的事情,所以我写了下面的函数:
def np_deflection(l, P, a, E, I):
"""To Do. Write me."""
if (a < 0) or (a > l):
raise ValueError('force location is off beam')
x1 = np.arange(0, a)
x2 = np.arange(a, l + 1)
y1 = (3 * a - x1) * (P * x1**2) / (6 * E * I)
y2 = (3 * x2 - a) * (P * a**2) / (6 * E * I)
return np.hstack([x1, x2]), np.hstack([y1, y2])
问题来了,在计算的某个时刻,y1 的值改变了符号。这是一个例子。
if __name__ == '__main__':
import matplotlib.pyplot as plt
l, P, a, E, I = 120, 1200, 100, 30000000, 926
x, y = deflection(l, P, a, E, I)
print(max(y))
np_x, np_y = np_deflection(l, P, a, E, I)
print(max(np_y))
plt.subplot(2, 1, 1)
plt.plot(x, y, 'b.-')
plt.xlabel('dist from fixed end (in)')
plt.ylabel('using a range/list')
plt.subplot(2, 1, 2)
plt.plot(np_x, np_y, 'r.-')
plt.xlabel('dist from fixed end (in)')
plt.ylabel('using numpy range')
plt.show()
如果运行该图,您会看到在 x1
中的点 x = 93
处,曲线中出现错位,该值似乎更改符号。
谁能解释 a) 发生了什么? b) 我做错了什么?
最佳答案
我打赌这与某些人建议的溢出无关,而与 np.arange
的默认 dtype
无关。如果您将整数开始、停止和步进传递给 arange
,则输出将是一个整数数组。
在 python 2.x 中,/
运算符使用整数除法。
例如:
import numpy as np
print np.arange(10) / 3
结果:
[0 0 0 1 1 1 2 2 2 3]
但是,
np.arange(10, dtype=float) / 3
或
np.arange(10.0) / 3
或
np.arange(10) / 3.0
都会导致
[ 0. 0.33333333 0.66666667 1. 1.33333333 1.66666667
2. 2.33333333 2.66666667 3. ]
如果您希望 /
运算符始终将结果向上转换为 float ,那么您可以使用 from __future__ import division
。
另一种选择是了解数组的数据类型。 Numpy 允许您对数据在内存中的存储方式进行非常低级别的控制。这在实践中非常,非常有用,但乍一看似乎有点令人惊讶。但是,向上转型规则非常简单,值得了解。基本上,无论何时在操作中使用两种类型,如果它们相同,则保留该类型。否则,使用两者中更通用的那个。
关于python - numpy arange 值意外改变符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114259/
我在最近更新了运行 Ubuntu 的计算机并且 Python 的默认版本更改为 2.7 时注意到了这个问题。 import json import numpy as np json.dumps(lis
我需要将一些 Matlab 代码转换成 P。我被困在了 numpy.arange我使用给定角度(以弧度为单位)在圆弧上连续设置点。 我做到了这一点(例如 x 轴上的点): def sensor_dat
试试这个: import numpy as np np.arange(0,3*0.1,0.1) 输出将是: 数组([ 0., 0.1, 0.2, 0.3]) 这令人难以置信,因为对于 np.arang
我原以为 numpy 的 arange(start,end) 会生成 [start,end] 范围内的值。以下示例演示了情况并非总是如此(最终值大于 end): import numpy as n
这个问题已经有答案了: Is floating point math broken? (33 个回答) 已关闭 5 年前。 我正在尝试为 N 个离散分数的分布创建一个 N+1 个 bin 的数组。 我
我想创建每月间隔而不使用 np.arange 进行迭代。作为一个简单的示例,我想要一个包含 np.datetime64 对象的数组,表示 1990-2000 范围内的元旦。我想是这样的: np.ara
我正在教自己一些关于 numpy 的知识,我已经整理了一些旧的本科教材以用作示例。因此,我编写了一个 without numpy 函数来计算悬臂梁在任意点的单点载荷引起的挠度。非常简单,除了偏转方程会
有人可以向我解释这里发生了什么吗? 为什么 0.3 和 0.7 值有更多的小数点。我只想要 1 个小数点值。 threshold_range = np.arange(0.1,1,0.1) thresh
我有一个函数要应用于排列: import math from numpy import arange x = arange(7.0,39.0,0.0001) fx = math.exp(-2.0 /
np.arange 接受三个参数:开始、停止和步骤。 我想要的步长是-0.3048。我还有单独的数组用于启动和停止。 首先,我有一个完整的元素数组: array([5.000, 5.000, 5.00
我正在尝试用基于像素的图像的所有 x 坐标的列表填充一个 numpy 数组。所以基本上,n x m 图像将有 n 1,n 2的,依此类推,直到 n m。有没有一种简单的方法来填充一个 numpy 数组
以下是我使用的代码: import numpy as np import pandas as pd from pandas import DataFrame, Series animals = Dat
这个问题在这里已经有了答案: Concatenate range arrays given start, stop numbers in a vectorized way - NumPy (1 个回
有没有办法带... >>> x = np.array([0, 8, 10, 15, 50]).reshape((-1, 1)); ncols = 5 ……然后把它变成…… array([[ 0, 1
我已经使用 numpy 的 arange 函数来制作以下范围: a = n.arange(0,5,1/2) 这个变量本身可以正常工作,但是当我尝试将它放在我的脚本中的任何位置时,我会收到一条错误消息:
我正在使用 arange 函数来定义我的 for 循环迭代并得到意想不到的结果。 i = arange(7.8,8.4,0.05) print i 产生以下结果: [ 7.8 7.85 7.9
我在另一个使用 Numpy 函数 arange 的文件中有一个函数,即 import numpy as np def plot_2D_boundary(plot_range, points, deci
考虑以下 numpy 数组: import numpy as np arr = np.array([np.random.permutation(4) for _ in range(4)]) array
假设我想生成一个介于 0 和 1 之间、间距为 0.1 的数组。在 R 中,我们可以这样做 > seq(0, 1, 0.1) [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
我想做我上传的 png 插图所具有的功能,主要有两列,其中有数字。带星号的代码为我提供了类和“SquareMiles”。百分比栏更难获得。我将系列号数组除以该列的总系列数,但没有成功。这个部门如何才能
我是一名优秀的程序员,十分优秀!